Как получить список сборок TFS, запущенных в данный момент из командной строки? - PullRequest
3 голосов
/ 02 декабря 2011

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

.\TFSBuild start http://server-name:8080/tfs/project-collection project-name build-name priority:High /queue

Он даже возвращает некоторый код для сборки в очереди - Build queued. Queue position: 2, Queue ID: 11057.

Что я не знаю, так это как получить информацию о текущих запущенных сборках или о состоянии моей запущенной сборки из командной строки powershell? Конечная цель - начать публикацию после завершения сборки.

У меня уже есть все необходимые сценарии PowerShell для создания пакета развертывания на основе результатов сборки, его архивирования, копирования в производство и установки там. Все, что мне нужно сейчас - знать, когда моя сборка преуспеет.

Ответы [ 3 ]

5 голосов
/ 02 декабря 2011

Эта функция будет ожидать сборки с идентификатором очереди, заданным TFSBuild.exe:

function Wait-QueuedBuild {
    param(
        $QueueID
    )

    [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Build.Client')
    [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Client')

    $uri = [URI]"http://server-name:8080/tfs/project-collection"
    $projectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($uri)
    $buildServer = $projectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
    $spec = $buildServer.CreateBuildQueueSpec('*','*')

    do {
        $build = $buildServer.QueryQueuedBuilds($spec).QueuedBuilds| where {$_.Id -eq $QueueID}
        sleep 1
    } while ($build)
}

Вы можете получить идентификатор, возвращенный TFSBuild.exe, а затем вызвать функцию.

$tfsBuild = .\TFSBuild start http://server-name:8080/tfs/project-collection project-name build-name priority:High /queue
Wait-QueuedBuild [regex]::Match($tfsBuild[-1],'Queue ID: (?<id>\d+)').Groups['id'].Value
1 голос
/ 15 апреля 2016
    # load classes for execution
[Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") | Out-Null

# declare working variables
$Uri = New-Object System.Uri "http://example:8080/tfs"

# get reference to projection collection
$ProjectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($Uri)

# get reference to build server
$BuildServer = $ProjectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])

# loop through the build servers
foreach($Controller in $BuildServer.QueryBuildControllers($true))
{
    # loop through agents
    foreach($BuildAgent in $Controller.Agents)
    {
        Write-Host "$($BuildAgent.Name) is $($BuildAgent.IsReserved)"
    }
}
1 голос
/ 05 декабря 2011

Используя работу E.Hofman, доступную здесь , можно написать консольное приложение C #, которое использует TFS SDK и показывает, работает ли какой-либо агент сборки в настоящее время следующим образом:

using System;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;

namespace ListAgentStatus
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSServer:8080"));
            var buildServer = teamProjectCollection.GetService<IBuildServer>();

            foreach (IBuildController controller in buildServer.QueryBuildControllers(true))
            {
                foreach (IBuildAgent agent in controller.Agents)
                {
                    Console.WriteLine(agent.Name+" is "+agent.IsReserved);
                }
            }
        }
    }
}

Параметр .IsReserved - это то, что переключается в «True» во время выполнения сборки.

Я сожалею, что мои навыки в PowerShell не достаточно хороши для обеспечения PS-варианта выше.Пожалуйста, посмотрите здесь , где работа bwerks может помочь вам сделать это.

...