49

私は、すべてのプロジェクトの汎用ビルド テンプレートの定義に取り組んでいます。これは、「ルート プロジェクト」レベルに配置されています (TeamCity 8 のこの新機能のおかげです)。一部のプロジェクトではインストーラーを作成します。これは、powershell スクリプトを実行する別の「ビルド ステップ」で生成する必要があります。ただし、一部のプロジェクトではこのインストーラーが作成されないため、この追加のビルド手順は必要ありません。

ビルド パラメータに基づいてビルド ステップを条件付きで実行する方法はありますか? ここで「ビルドステップを無効にする」機能を利用できるのではないかと思いましたが、パラメーターを介してステップの有効/無効ステータスを定義する方法がわかりません。

もちろん、この条件をインストーラーの生成を実行するビルド ステップに組み込むこともできますが、これを teamcity 自体から処理できれば、よりクリーンになります。

4

4 に答える 4

17

何度も条件付きビルド手順が必要でしたが、残念ながら、現時点では機能がありません。http://youtrack.jetbrains.com/issue/TW-17939

多くのビルド構成でテンプレートを使用して、インストーラーを作成する必要のないビルド構成/プロジェクトのビルド ステップを無効にする理由はありません。個々のビルド構成でステップを無効にしても、それが基づいている親テンプレートには影響しません。

TC にランタイム/動的メソッドを組み込むほどきれいではありませんが、ときどき使用します。iwoも提案しました。

于 2014-07-02T22:20:31.653 に答える
11

TC は、実行ポリシーを除いて、そのレベルでの条件付きランナー ステップの実行をサポートしていないようです (ビルド ステータスが成功した場合のみ、以前のすべてのステップが正常に終了した場合、前のステップが失敗した場合でも常に)、それはあなたが望むものではありません。

そのため、system.Generate のようなインストーラー ジェネレーターの powershell ビルド ステップにカスタム システム ビルド パラメータを提供する必要があるようです。次に、powershell ランナーで、これを追加します。

param([int]$Generate)
if ($Generate) {
  Write-Host "generating installer..."
   # call your func()
} else {
   Write-Host "skip installer"
}

ランナー構成で、 -Generate %system.Generate% をスクリプト引数として追加します (追加のコマンド引数ではなく、注意してください!)。%system.Generate% は、ランタイム値に基づいて 1 または 0 に展開する必要があります。

于 2013-09-14T10:38:12.577 に答える
0

非常によく似た問題を解決する必要があるため、このユースケースを調査しています。私がこれまでに見つけた最良の解決策は、fwise の回答に記載されているものです。テンプレート内に必要な可能性のあるすべてのステップを含めますが、ケースバイケースで各プロジェクトの不要なステップを無効にします。

したがって、あなたの場合、「インストーラー」ビルドステップをルートレベルに含めますが、このテンプレートを継承し、インストーラーを持たないプロジェクトでは無効にします。

オプションのステップが 1 つだけの場合、これは良いアプローチのように思えますが、多くのオプションのステップを含む大規模で複雑なテンプレートにはうまく拡張できないことは確かです。

私はこれをTeamCityのドキュメントから拾いました:

  • 必要に応じてビルド手順を並べ替えることができます。テンプレートから継承されたビルド構成がある場合、継承されたビルド ステップを並べ替えることができないことに注意してください。ただし、カスタム ビルド ステップ (継承されない) は、継承されたビルド ステップの前または間であっても、任意の場所に任意の順序で挿入できます。継承されたビルド ステップは、元のテンプレートでのみ並べ替えることができます。
  • ビルド構成テンプレートから継承されている場合でも、ビルド ステップを一時的または永続的に無効にすることができます。
于 2016-07-26T19:09:06.243 に答える