26

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

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

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

4

4 に答える 4

38

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

Powershellでは、 env「プロバイダー」を使用して環境変数にアクセスできます。

$env:PATH

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

$env:build_number
于 2012-11-08T10:05:53.910 に答える
16

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

私は、psakeに最適化されたビルドランナーを作成することにしました、それまでの間、次のいずれかを実行できます。

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

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

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

于 2013-09-04T05:28:59.950 に答える
6

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

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

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

$build_number = %build.number%

パーツは%build.number%TeamCityが提供するデータに置き換えられます。ソースコードスクリプト入力モードでしか動作しないと思います。

于 2012-11-08T08:42:30.997 に答える
1

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

于 2014-05-08T13:43:42.120 に答える