powershell - 如何从命令行获取当前正在运行的 TFS 构建列表?

标签 powershell tfs tfsbuild

我正在尝试自动化部署过程,作为其中的一部分,我需要从命令行运行我的发布版本。我可以做到,使用像

这样的命令

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

它甚至会为排队构建返回一些代码 — Build queued。队列位置:2,队列 ID:11057

我不知道的是,如何从 powershell 命令行获取有关当前正在运行的构建 或有关我正在运行的构建的状态 的信息? 最终目标是在构建完成后开始发布。

我已经获得了所有必要的 powershell 脚本,可以根据构建结果创建部署包,将其压缩,复制到生产环境并在那里安装。我现在只需要知道我的构建何时成功。

最佳答案

此函数将等待具有 TFSBuild.exe 给定的队列 ID 的构建:

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返回的id,然后调用函数。

$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

关于powershell - 如何从命令行获取当前正在运行的 TFS 构建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8354031/

相关文章:

powershell - Powershell invoke-expression问题

PowerShell 更改文件和文件夹的所有者

java - Eclipse 2019-09 连接到 Team Foundation Server 无限循环

powershell - powershell中是否有命令可以获取MAC的IP信息

c# - 如何通过查询获得某人工作过的所有工作项?

css - 样式表未加载 checkin TFS 的元素(通过 visual studio online)

tfs - 在 Visual Studio Online 中设置门控 checkin 构建选项

msbuild - 使用 C#6 构建 TeamCity

web - TFS Team Build - 如果 app_code 引用解决方案中的另一个项目,则构建失败

powershell - 如何使powershell在错误上不那么冗长?