BuildDropの場所にある最新のビルドを見つけることができますか?
質問
"\ server \ builddrop \"のドロップ位置を持つTFS 2010にビルドを定義しました。ビルドをキューに入れると、 "\ server \ builddrop \ mybuild \ mybuild_20120309.1"のようなものにビルドが削除されます。
変更しない正確な場所でドロップするビルドを定義できるようにしたいのですが。 ビルド定義を常にこのような場所に落とすように変更できますか?
1)\ server \ builddrop \ mybuild \
または
2)\ server \ builddrop \ mybuild \最新\
解決
最新の建築物を見つける場所を知りたい場合は、ドロップの場所がどこにあるのか、そしてそれらが最新のものであるかを簡単に判断できるようにすることができると最善があります。ドロップ場所の出力を同じディレクトリにコピーしたい場合は、ビルドを実行するカスタムテンプレートを作成する必要があります(デフォルトのテンプレートを変更することによって)。ビルド中に、ファイルがドロップ位置にコピーされた後、スクリプトを実行して、ドロップ場所のファイルを共通の "最新の"ディレクトリにコピーします。ただし、ビルドを実行している間に、「最新」ディレクトリのファイルにアクセスしている問題に簡単に実行できます。そのファイルはそれらのファイルを上書きできないために失敗します。
最後に成功したビルドのドロップ位置を判断したい場合は、プログラム的に実行することもできます。以下は、私が書いたカスタムアクティビティのスニペットです:
string tfsUri = "http://pathToTfsServer:8080/tfs";
string projectName = "MyTfsProject";
string buildDefinition = "MyTfsBuildDefinitionName";
// connect to the Project and query the builds of the BuildDefinition
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUri), new UICredentialsProvider());
tfs.EnsureAuthenticated();
var buildServer = tfs.GetService<IBuildServer>();
var buildDetails = buildServer.QueryBuilds(projectName, buildDefinition);
// sort builds based on start time
Array.Sort(buildDetails, delegate(IBuildDetail build1, IBuildDetail build2)
{
return build1.StartTime.CompareTo(build2.StartTime);
});
// return only the last successful build that currently exists
for (int i = buildDetails.Length - 1; i >= 0; i--)
{
if (buildDetails[i].Status == BuildStatus.Succeeded && buildDetails[i].IsDeleted == false)
return buildDetails[i];
}
.
チームビルド2010をカスタマイズしている場合は、読んで Ewald Hoffmanのチュートリアル
他のヒント
ビルドがトリガされると、指定されたドロップの場所にフォルダが作成されます。
- mybuild_20120309.1
- mybuild_20120309.2
- mybuild_20120310.1
フォルダ命名規則は
"Build Definition"_"yyyymmdd"."build number"
です ビルド番号は1日に与えられたビルドの数です。したがって、ビルドをトリガーすると、ビルドドロップの場所を移動して(命名規則に基づく)最新のフォルダを移動してセットアップを取得できます。