0

我想通过 powershell 下载 TeamCity 工件。它必须是特定分支的最后一次成功构建。

我注意到访问工件的两个常见 url 路径。一个似乎是 /repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/ARTIFACT_PATH

问题是最后的文件依赖于发布版本。在 TeamCity 中有指定所有文件的语法\*.msiFileName-{version.number}.msi尝试访问此 url 时,是否有任何方法可以指定以开头的工件?


编辑:

我注意到的另一个 url 用于 REST API。

http://teamcity/guestAuth/app/rest/builds/branch:[BRANCH],buildType:[BUILD TYPE],status:SUCCESS,state:finished/artifacts/[BUILD PATH] 

问题是我无法从这里下载工件。如果我想下载工件,我必须使用当前的构建 ID。上面的 url 给出了以下 url:/guestAuth/app/rest/builds/id:[Build ID]/artifacts/content/[Artifact Path]下载工件。

我可以使用第一个 REST url 最终通过返回的 xml 获得第二个,但更喜欢更直接的方法。

4

1 回答 1

3

不幸的是,由于 TeamCity 工件不可浏览,因此 wget 递归下载或通配符等常用解决方法不适用。

在 wget 或 curl 查询中使用通配符 如何使用 Wget 将所有图像下载到单个文件夹中

您可以尝试的一种解决方法是格式化作业中的链接,将链接保存到文本文件并将其存储为工件,并使用静态名称。然后,您只需要下载该文本文件即可获取链接。

我发现您可以通过执行以下操作来格式化 TeamCity 作业中的工件 URL:

%teamcity.serverUrl%/repository/download/%system.teamcity.buildType.id%/%teamcity.build.id%:id/<path_to_artifact>

在命令行步骤中。您可以通过执行以下操作将其写入文件:

echo %teamcity.serverUrl%/repository/download/%system.teamcity.buildType.id%/%teamcity.build.id%:id/myMsi-1.2.3.4.msi > msiLink.txt"

现在您有了一个具有常量名称的工件,它指向具有更改名称的安装程序(或其他工件)。

如果您使用工件 msiLink.txt 您不需要使用 REST 接口(它仍然是两个调用,都通过相同的接口)。

您可以使用以下命令轻松从批处理/cmd 下载最新版本:

wget <url_server>/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/msiLink.txt ---user #### --passsword #### set /P msi_url=<msiLink.txt wget %msi_url% --user #### --passsword ####

希望能帮助到你。

更新:抱歉,我刚刚意识到针对 PowerShell 提出的问题:

$WebClient = New-Object System.Net.WebClient $WebClient.Credentials = New-Object System.Net.Networkcredential("yourUser", "yourPassword") $WebClient.DownloadFile( "<url_server>/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/msiLink.txt", "msiLink.txt" ) $msi_link = [IO.File]::ReadAllText(".\msiLink.txt") $WebClient.DownloadFile( $msi_link, "yourPath.msi" )

于 2016-02-04T12:20:39.423 回答