我想通过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获得第二个,但更喜欢更直接的方法。
答案 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" )