2017-04-06 9 views
1

私はTeamCityをビルドに使用するプロジェクトを行っています。すべてのビルド(TeamCity)で変更されるパスを決定するPowerShellのオプションは何ですか?

私はVMを持っており、いくつかのファイルをバックアップするPowerShellスクリプトを作成し、TeamCityから手動でダウンロードしたZIPアーティファクトを開き、それを自分のVMにコピーします。

ZIPアーティファクト(常に同じ名前)を取得するようにスクリプトを強化したいと思います。

問題は、ダウンロードパスには常に変更されているビルド番号が含まれていることです。 ZIPアーティファクトのダウンロードパスを要求する以外に、私はそれが本当に気にしません。

例アーティファクトパスかもしれないこと:

のhttp:// {サーバー} /リポジトリ/ダウンロード/ {プロジェクト}/{BUILD_NUMBER} ID/{プロジェクト}

の.zip TeamCityにはビルド番号を取得できる「最後に成功したビルド」ページがあります。

この問題にアプローチするにはどうすればよいと思いますか?

私はTeamCityを初めて使っていますが、答えは「TeamCityはこれを実行します - あなたはPowerShellスクリプトは必要ありません」ということもあります。その点では方向性が役立つでしょう。

現時点では、PowerShellスクリプトはトリックを実行し、実行には約30秒しかかかりません(手動でファイルをコピーするすべてのピアよりもはるかに高速です)。私はZIPのダウンロードを自動化するだけで満足していますので、私はスクリプトを "実行して忘れ"て、更新されたVMで終わることができます。

PowerShellを使用して実行時に変更するパス情報を入力して取得する知識ギャップが最小限に抑えられているようです。

私はこの情報を収集するためにPS内でC#を使用するかもしれませんが、私はそれを行うためのより多くのPS方法を望んでいました。

あなたの考えとアドバイスをお寄せいただきありがとうございます!

更新:Octopus Deploy(https://octopus.com/)を使用していたいくつかのチームがこの種のものを使用していたことが判明しました。私は今のところそれを使用しています - 実際はPSソリューション全体よりも面倒ですこの時点で手動で新しいビルドを開始するためのいくつかの手順を実行します。

また、TC管理者が新しいビルドが利用可能になったときにOctopusに通知するWebhookなどを提供するのを待っています。私がそれを持っていれば、Octopusの管理者は、導入を自動的に行うことができるはずだと言います。

明るい面では、Octopus用に用意されたwebhookプラグインを使用してMicrosoft Teamsと統合されたビルドプロセスがあります。また、Octopusの開発者は、これを単純化するためにMicrosoft Teamsコネクタを作成することを検討しています。私のチームチャットで新しいビルドが利用可能であるという通知を受けることはいいことです。

+1

ビルドを選択する基準は何ですか?特定のTeamCity設定やタグ付き、固定などで最後に成功したように。 – Yaegor

+0

この場合、それは作業ブランチへのチェックインです。私は、自分のVMがチームに提供されている最新のコードを代表するようにしています。 –

答えて

-1
  1. TEAMCITY_BUILD_PROPERTIES_FILE環境変数のパスのファイル内容を読み取ります。
  2. teamcity.configuration.propertiesを探します。ファイルのファイル行、iirc値はバックスラッシュでエンコードされます。
  3. THATファイルを読み、teamcity.serverUrl値を見つけてデコードします。
  4. このようなURLを構築: {のserverURL}/httpAuth /リポジトリ/ダウンロード/ {buildtypeid}/lastSuccessful/file.txtを

ここで(C#の)例を示します。 https://github.com/WideOrbit/buildtools/blob/master/RunTests.csx#L272

+0

私の知る限り、この回答は、TeamCityと同じマシンでスクリプトが実行されないため、問題を解決しません。 – rufer7

+0

残念ながら、VMにビルドエージェントがインストールされていないことは明らかでした。スクリプトを実行したとき(ビルドサーバー、デプロイサーバー、または手動のいずれか)にパラメータを送信せずに、ビルドサーバーから最新の成果物を取得できるようにするには、残りのAPIを別のものとして使用する必要があります説明した。 – user7829786

0

あなたは

http://<ServerUrl>/repository/downloadAll/<BuildId>/.lastSuccessful 

ここで、BuildIdはビルド構成の一意の識別子です。

# 
# GetArtefact.ps1 
# 
Param(
    [Parameter(Mandatory=$false)][string]$TeamcityServer="", 
    [Parameter(Mandatory=$false)][string]$BuildConfigurationId="", 
    [Parameter(Mandatory=$false)][string]$LocalPathToSave="" 
) 
Begin 
{ 
    $username = "guest"; 
    $password = "guest"; 

    function Execute-HTTPGetCommand() { 
     param(
      [string] $target = $null 
     ) 
     $request = [System.Net.WebRequest]::Create($target) 
     $request.PreAuthenticate = $true 
     $request.Method = "GET"   

     $request.Headers.Add("AUTHORIZATION", "Basic"); 
     $request.Accept = "*" 
     $request.Credentials = New-Object System.Net.NetworkCredential($username, $password) 
     $response = $request.GetResponse() 

     $sr = [Io.StreamReader]($response.GetResponseStream()) 
     $file = $sr.ReadToEnd() 
     return $file; 
    } 

    Execute-HTTPGetCommand http://$TeamcityServer/repository/downloadAll/$BuildConfigurationId/.lastSuccessful | Out-File $LocalPathToSave 

} 

し、適切なパラメータでこれを呼び出す:この質問の

私の実装では、PowerShellで、あります。

編集:私がここで使用した現在の資格情報はゲストアカウントでした。ゲストアカウントにこれを行う権限があるかどうか、または適切なアカウントを指定する必要があります。

0

TeamCity REST APIを使用してビルド成果物をダウンロードするURLを作成してみてください。 最後に成功したビルドや最後に特定のタグでタグ付けされたものなど、幅広い基準を使用して永続的なリンクを得ることができます。

最後に成功するには、 http:// {server}/app/rest/builds/buildType:(id:{build.conf.id})、status:SUCCESS/artifacts/content/{file。名前}

0

TeamCityには、NuGetフィードにアーティファクトを公開する機能があります。次に、NuGetを使用して、作成されたパッケージをインストールし、アーティファクトがどこにあるかを気にする必要はありません。一度これを行うと、ソースをNuGetのフィードURLに指定することで、nuget.exeを使ってインストールできます。フィードを設定する方法については、https://confluence.jetbrains.com/display/TCD10/NuGetをご覧ください。

関連する問題