Как определить, стоит ли сборка в очереди, но не запущена в API TFS2010? - PullRequest
1 голос
/ 03 ноября 2010

Я использую перечисление Microsoft.TeamFoundation.Build.Client.BuildStatus для каждого, и он прекрасно работает для содержащихся в нем статусов.

Но есть ли явно очевидный способ определить, стоит ли сборка в очереди, но еще не выполняется? Я знаю, что сборщик сборок в Visual Studio может увидеть это, у меня проблемы с получением этих данных программно.

Должен ли я проверять что-то на командном объекте вместо самого IBuildDetail? Любые советы приветствуются.

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

К сожалению, не представляется, что IBuildDetailSpec запросы когда-либо возвращают сборки в очереди. Однако вы можете использовать интерфейс IQueuedBuildSpec для запроса сборок в очереди.

Например:

public IEnumerable<IQueuedBuild> getQueuedBuilds(TfsTeamProjectCollection tfsCollection, string teamProject)
{
    // Get instance of build server service from TFS
    IBuildServer buildServer = tfsCollection.GetService<IBuildServer>();

    // Set up query
    IQueuedBuildSpec spec = buildServer.CreateBuildQueueSpec(teamProject);
    spec.Status = QueueStatus.Queued;

    // Execute query
    IQueuedBuildQueryResult result = buildServer.QueryQueuedBuilds(spec);

    // Array of queued builds will be in the result.QueuedBuilds property
    return result.QueuedBuilds;
}
0 голосов
/ 31 августа 2016

@ Грег Кейс Сначала спасибо за код, вы дали мне решение, которое я искал. Во-вторых, я хочу предложить использовать тот же фрагмент вашего кода, чтобы получать уведомления от TFS для конкретной сборки в очереди. Я уже использовал его, чтобы получить уведомление о том, что сборка, поставленная в очередь, завершена, и он даже возвращает сведения об исключительной ситуации в случае сбоя. Для этого вам нужно подключиться () к построенной из очереди сборке, возвращенной из кода, а затем зарегистрировать событие, я хотел добавить его как комментарий, но не смог для длинного текста

IQueuedBuild CurrentBuild =  result.QueuedBuilds.First();
CurrentBuild.Connect(); 
CurrentBuild.PollingCompleted += CurrentBuild_PollingCompleted;
0 голосов
/ 03 ноября 2010

Вы сможете увидеть статус сборки как BuildStatus.NotStarted, как только сборка действительно достигнет очереди. Однако до того, как он достигнет очереди, у него действительно нет статуса.

Если вы отправляете свою сборку программно, вы можете сделать:

bool success = queue.WaitForBuildStart(pollingIntervalInMilliseconds, timeOutInMilliseconds);

Пока агент слушает, это на самом деле должно возвращаться очень быстро. Если у вас медленная сеть, это может занять пару секунд для установления связи.

Как только он передает WaitForBuildStart, состояние устанавливается на BuildStatus.NotStarted, пока не переместится на InProgress и остальную часть пути вниз по линии.

...