TFS 2008(SP1)を使用したとき、ビルドが実行されていた理由を含む「Reason」MSBuildプロパティにアクセスできました。これはビルドが開始されるとすぐに利用可能になったため、それをフェッチするためにタスク/ターゲットは必要ありませんでした。現在、TFS 2010(およびワークフローではなくMSBuild /アップグレードテンプレート)を使用しており、プロパティにデータが入力されていません。IBuildDetailから情報を取得するカスタムタスクを作成することはできますが、MSBuildスクリプトですぐに使用できるプロパティはありませんか?以前は、ビルドの理由に基づいて条件付きのMSBuildスクリプトのインポートを実行できましたが、タスク/ターゲットを使用して理由を取得する必要がある場合、これは機能しません。
1 に答える
まだMSBuildスクリプトを使用しているので、アップグレードテンプレートを使用していると思います。テンプレートが現在のビルド理由を取得し、[構成フォルダーのTfsBuildの実行]アクティビティを介してMSBuildに渡すように、アップグレードテンプレートのクローン/編集または変更を行うことができます。Visual Studioで編集するテンプレートを開き、次の手順を実行します。
Run On Agentアクティビティを選択し、 [変数]タブに移動します。ビルド理由を格納する新しい変数を作成し、IBuildDetailからの情報を使用してデフォルト値を設定します。変数のリストに次のようなものを追加します。
Name: currentBuildReason
Variable type: String
Scope: Run On Agent
Default: BuildDetail.Reason.ToString()
次に、「構成フォルダーのTfsBuildの実行」アクティビティーの「プロパティー」ダイアログをクリックします。CommandLineArgumentの楕円を選択して、TFSBuildに引数を渡すダイアログを開きます。おそらく、リストされている変数は1つだけです。
MSBuildArguments
これで、次のように、現在のビルド理由をコマンドライン引数に追加できます(既存のMSBuildArgumentsを渡すことができます)。
String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments)
[OK]をクリックしてダイアログを閉じます。これにより、現在のビルド理由がCurrentBuildReasonという名前の新しい引数として渡され、MSBuildスクリプトで$(CurrentBuildReason)として参照できます。
アップグレードテンプレートを保存してチェックインします。テンプレートをビルド定義に割り当てます。その定義で使用されるMSBuildスクリプトは、上記のように変数を使用できるようになりました。