使用动态名称访问Teamcity工件

时间:2015-07-29 14:19:04

标签: powershell teamcity-9.0

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

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

问题是最后的文件依赖于发布版本。在TeamCity中,有语法指定所有文件\*.msi。在尝试访问此网址时,有没有办法指定以FileName-{version.number}.msi开头的工件?

修改

我注意到的另一个网址是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网址最终通过返回的xml获得第二个,但更喜欢更直接的方法。

1 个答案:

答案 0 :(得分:3)

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

Using wildcards in wget or curl query How do I use Wget to download all Images into a single Folder

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

我发现您可以通过执行以下操作来格式化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接口(它仍然可以通过同一个接口进行两次调用)。

您可以使用以下方法从batch / 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" )