TFSから特定のビルドを取得しようとしていますが、イライラするほど困難です。次のようなビルドをトリガーするMVCアプリケーションがあります。
IBuildServer buildServer = (IBuildServer)Server.GetService(typeof(IBuildServer));
IBuildDefinition def = buildServer.GetBuildDefinition(TeamProject, BuildDefinition);
var queuedBuild = buildServer.QueueBuild(def);
QueueBuildはIQueuedBuildを返し、私は次のようなことをしたいと思っていました。
return queuedBuild.Build.BuildNumber
そのため、正しいビルドを取り戻すためにビルドサーバーにクエリを実行するために使用できるいくつかの一意の値があります。残念ながら、実行がこのメソッドを終了するときにBuildがnullになる場合と、nullにならない場合があるため、失敗します。
ビルドがキューに入れられた後、このメソッドをポーリングします
public string GetBuildStatus(string TeamProject, string BuildDefinition, string BuildNumber)
{
string status = string.Empty;
IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(TeamProject, BuildDefinition);
buildDetailSpec.MaxBuildsPerDefinition = 1;
buildDetailSpec.Status = BuildStatus.InProgress | BuildStatus.None;
buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
IBuildQueryResult queryResult = buildServer.QueryBuilds(buildDetailSpec);
if (queryResult.Builds.Length > 0)
{
status = queryResult.Builds[0].Status.ToString();
}
return status;
}
これはある程度機能しますが、キューに複数のビルドがある場合、このポーリングメソッドで、作業しているビルドが最初のメソッドでキューに入れられたビルドであるかどうかを知る方法がありません。最初の方法でキューに入れられた特定のビルドを取り戻すために私が何ができるかを誰かが知っていますか?
ありがとう!