使用动态名称访问 Teamcity 工件
Accessing Teamcity Artifact with Dynamic name
我想通过 powershell 下载 TeamCity 工件。它必须是特定分支的最后一次成功构建。
我注意到有两个常见的 url 访问工件的路径。一个好像是
/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/ARTIFACT_PATH
问题是最后的文件依赖于发布版本。在 TeamCity 中,有语法来指定所有文件 \*.msi
。尝试访问此 url 时,是否有任何方法可以指定以 FileName-{version.number}.msi
开头的工件?
编辑:
我注意到的另一个 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 获得第二个 xml,但我更喜欢更直接的方法。
不幸的是,由于 TeamCity 工件不可浏览,因此 wget 递归下载或通配符等常用解决方法不适用。
Using wildcards in wget or curl query
How do I use Wget to download all Images into a single Folder
您可以尝试的一种解决方法是格式化作业中的 link,将 link 保存到文本文件并将其存储为工件,并使用静态名称。然后您只需要下载该文本文件即可获得 link.
我发现您可以通过以下方式在 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" )
我想通过 powershell 下载 TeamCity 工件。它必须是特定分支的最后一次成功构建。
我注意到有两个常见的 url 访问工件的路径。一个好像是
/repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/ARTIFACT_PATH
问题是最后的文件依赖于发布版本。在 TeamCity 中,有语法来指定所有文件 \*.msi
。尝试访问此 url 时,是否有任何方法可以指定以 FileName-{version.number}.msi
开头的工件?
编辑:
我注意到的另一个 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 获得第二个 xml,但我更喜欢更直接的方法。
不幸的是,由于 TeamCity 工件不可浏览,因此 wget 递归下载或通配符等常用解决方法不适用。
Using wildcards in wget or curl query How do I use Wget to download all Images into a single Folder
您可以尝试的一种解决方法是格式化作业中的 link,将 link 保存到文本文件并将其存储为工件,并使用静态名称。然后您只需要下载该文本文件即可获得 link.
我发现您可以通过以下方式在 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" )