TFSからビルド定義を取得して外部プログラムに渡す方法
これは私たちが手動で行っていることです:
1)新しいビルドをキューに入れます2)ビルドが完了したら、ドロップフォルダーに移動してexe名を取得します3)このexe名をテスト自動化プログラムに渡して実行します。`
これらの3つのステップを自動化したい。プログラムでビルド定義を取得することは可能ですか?
TFSからビルド定義を取得して外部プログラムに渡す方法
これは私たちが手動で行っていることです:
1)新しいビルドをキューに入れます2)ビルドが完了したら、ドロップフォルダーに移動してexe名を取得します3)このexe名をテスト自動化プログラムに渡して実行します。`
これらの3つのステップを自動化したい。プログラムでビルド定義を取得することは可能ですか?
カスタム ビルド テンプレートを作成します。デフォルト (または現在使用しているもの) のコピーを出発点として使用します。BuildDetail.CompilationStatus = BuildPhaseStatus.Succeeded のワークフローを見てください。次に、別のアプリケーションを呼び出す機会があります。それは、スタブ プログラム/PowerShell スクリプト/その他の実行可能なプロセスです。BuildDetail.DropLocation を使用して、完了したばかりのビルドのパスを渡すことができます。
ステップ #1 が実行されたと仮定すると、この最新の (成功した!) ビルドはlastKnownGoodBuild
、特定のビルド定義の として到達可能です。
これを念頭に置いて、以下に基づくコンソール アプリを採用できます。
using System;
using System.IO;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
namespace BuildDropLocation
{
class Program
{
static void Main()
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://yourTFSServerUri"));
var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
IBuildDefinition myBuildDefinition = buildService.GetBuildDefinition("TeamProjectName", "BuildDefinitionName");
Uri lastKnownGoodBuild = myBuildDefinition.LastGoodBuildUri;
IBuildDetail myBuildDetail = buildService.GetBuild(lastKnownGoodBuild);
string[] myExeFiles = Directory.GetFiles(myBuildDetail.DropLocation, "*.exe",SearchOption.AllDirectories);
foreach (var exeFile in myExeFiles)
{
Console.WriteLine(myExeFile);
}
}
}
}
上記を使用すると、 Team Project に存在*.exe
するビルド定義の最後のビルドのドロップ場所の下にあるパスを取得できます。このアプローチにより、TFS ビルドとテストの実行を完全に分離することができます。たとえば、このコンソールアプリを毎晩実行するようにスケジュールし、ランナーを呼び出して最新の成功したビルドで動作させることができます。ビルドとテストランを何らかの方法で結合したい場合は、@TimWagaman が提案するように、ビルド中にテスト ランナーを呼び出すことによって続行する必要があります。この「カップリング」には、次のものが含まれる場合があります。BuildDefinitionName
TeamProjectName
この場合、テストは、コンパイル フェーズで壊れないすべてのビルドで実行されます。
<MakeDir Directories="$(TemporaryFolder)" />
<Exec Condition=" '$(IsInTeamBuild)'=='True'" Command=""$(TfsTask)" history ../ /r /noprompt /stopafter:1 /version:W > "$(TemporaryFolder)\grab-changeset.txt"" />
<Exec Condition=" '$(IsInTeamBuild)'=='True'" Command=""$(TfsTask)" properties "$(MyMSBuildStartupDirectory)\all-companies-run-after-update.js" > "$(TemporaryFolder)\grab-properties.txt"" />
上記を使用して、生成された .txt ファイルから build#、branch、revision# を抽出します。