0

PowerShell 経由で TeamCity アーティファクトをダウンロードしたいと考えています。特定のブランチの最後に成功したビルドである必要があります。

アーティファクトにアクセスするための 2 つの一般的な URL パスに気付きました。一つはそうらしい /repository/download/BUILD_TYPE_EXT_ID/.lastSuccessful/ARTIFACT_PATH

問題は、最後のファイルがリリース バージョンに依存していることです。TeamCity 内には、すべてのファイルを指定する構文があります\*.msiFileName-{version.number}.msiこの URL にアクセスしようとするときに、アーティファクトを指定する方法はありますか?


編集:

私が気付いたもう 1 つの 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 から最終的に 2 番目の URL を取得できますが、もっと簡単な方法をお勧めします。

4

1 に答える 1

3

残念ながら、TeamCity アーティファクトは参照できないため、wget 再帰ダウンロードやワイルドカードなどの通常の回避策は適用できません。

wget または curl クエリでワイルドカード を使用する Wget を使用してすべての画像を単一のフォルダーにダウンロードするにはどうすればよいですか

試すことができる 1 つの回避策は、ジョブ内のリンクをフォーマットし、リンクをテキスト ファイルに保存し、それをアーティファクトとして静的な名前で保存することです。次に、そのテキスト ファイルをダウンロードしてリンクを取得するだけです。

次のようにして、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 インターフェイスを使用する必要はありません (同じインターフェイスを介した 2 つの呼び出しです)。

以下を使用して、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" )

于 2016-02-04T12:20:39.423 に答える