web-dev-qa-db-ja.com

PowershellスクリプトでTeamCityシステムプロパティにアクセスする方法はありますか?

Powershellランナーを使用して、TeamCityで新しいビルド構成をセットアップしようとしています。しかし、ビルドスクリプトでTeamCityシステムプロパティにアクセスする方法が見つからないようです。私はそれが可能であるというヒントを見てきましたが、それを行う方法に関するドキュメントを見つけることができません。

Powershell変数構文$ variableを使用してシステムプロパティにアクセスしてみました。また、メモリ内のすべての変数を印刷しましたが、使用するteamcity変数はありません。

これはPowershellランナーで可能ですか?可能であれば、それを機能させるために必要な構文は何ですか?

22
Paul

TeamCityは、build.numberなどの環境変数をセットアップします(TeamCity内でこれらのリストを確認できます)。

Powershellでは、env "provider"を使用して環境変数にアクセスできます。

$env:PATH

TeamCity変数には、を置き換えることでアクセスできます。 _を使用すると、build.number変数に次のようにアクセスできます。

$env:build_number
33
Marcus

TeamCity documentation に記載されているように、システムパラメーターはビルドスクリプトランナーに渡されますが、すべてのビルドスクリプトランナーがそれらの処理方法を知っているわけではありません。 Powershellスクリプトランナーの場合、スクリプトファイルを使用すると、スクリプトに伝達されません

が行うpsakeに最適化されたビルドランナーを書くことが私に起こりましたが、その間、次のいずれかを行うことができます:

  • [スクリプトソース]ボックス内で利用可能なパラメーター展開を使用して、TeamCityビルドプロパティのいずれかをスクリプトパラメーターに明示的にマップします。例.\build.ps1 -someParam:%build.name%

  • $env:NAME_IN_TEAMCITY syntax、たとえば$env:TEAMCITY_VERSIONを使用してPowerShell内で明示的にアクセスできる環境パラメーターを使用するか、ループして変数スコープにプッシュする

  • teamCityがビルド中に使用可能にするビルドプロパティファイルにアクセスします。このファイルは$env:TEAMCITY_BUILD_PROPERTIES_FILEで入手できます。XMLバージョンをロードすると、ループ処理を簡単に実行してすべてをスコープにプッシュできます(もちろん、すべてを文字列として取得します)。私はこれを行う方法について要旨を投稿しました( https://Gist.github.com/piers7/6432985 )。または、Psakeを使用している場合は、上記のスクリプトを変更して、Psakeの-properties引数に直接渡すことができるハッシュテーブルを返します。

15
piers7

可能です。システムプロパティをPSakeスクリプトに渡す方法の例を次に示します。

& .\psake.ps1 -parameters @{build_number=%build.number%; personal_build=%build.is.personal%}

Psakeを使用しない場合は、次のように変数を定義できます。

$build_number = %build.number%

%build.number%パーツはTeamCity提供のデータに置き換えられます。 ソースコードスクリプト入力モードでのみ機能すると思います。

6

Powershellスクリプトで宣言されたパラメーターにシステムパラメーターを渡すメタランナーを作成しました。それは完璧ではありません( '@をソースに入れると壊れます)が、私が必要とするもので機能します。ここで見つけることができます: https://Gist.github.com/anonymous/ef60ada3f48f0fb25093

1
Patrik