powershell - Powershell 在 Azure DevOps 中触发构建
问题描述
我们刚刚将代码从现场 TFS 迁移到 Azure DevOps。
使用 TFS,我使用 powershell 脚本来构建和部署应用程序。部署部分仍然可以正常工作,但我不知道如何触发构建。我在旧 TFS 中使用的命令行是:
& "F:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TFSBuild" start [repository URL] [project] "[build definition]"
我知道 DevOps 有一个 REST API https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/queue?view=azure-devops-rest-5.0但有很多选择那里没有例子。我还看到了这篇文章:How to QUEUE a new build using VSTS REST API但是那里的解决方案不会等待构建完成并且它使用 API 4.1 - 不确定它是否对 DevOps 有效?我已经在 DevOps 中配置了构建定义。
我所需要的只是从一个 powershell 脚本排队构建并等待构建完成,即相当于我上面的 TFSBuild 脚本。有人可以帮忙吗?
解决方案
您可以使用以下脚本触发新构建并等待构建完成。
$tfsUrl = "http://{tfsServer}:{Port}/{Organization}/{Collection}/{Project}"
$buildsURI = $tfsUrl + '/_apis/build/builds?api-version=2.0'
$BuildDefsUrl = $tfsUrl + '/_apis/build/definitions?api-version=2.0'
$buildLog = "$tfsUrl/_apis/build/builds"
$allbuildDefs = (Invoke-RestMethod -Uri ($BuildDefsUrl) -Method GET -UseDefaultCredentials).value | Where-Object {$_.name -eq "BuildName"} | select id,name ## get all relevant builds
foreach ($build in $allbuildDefs)
{
$body = "
{
definition: {
id: $($buildDef.id)
},
reason: 'Manual',
priority: 'Normal',
parameters: ""{
'system.debug':'true'
}""
}" # build body
Write-Output "Queueing $($build.name)" # print build name
$buildOutput = Invoke-RestMethod -Method Post -Uri $buildsURI -UseDefaultCredentials -ContentType 'application/json' -Body $body -Verbose # trigger new build
$buildID = $buildOutput.id
$buildInfo = (Invoke-RestMethod -Uri "$buildLog/$buildID" -UseDefaultCredentials -Method get) # get build info by build ID
while($buildInfo.status -eq "inProgress" -or $buildInfo.status -eq "notStarted") # keep checking till build completed
{
Write-Output "Build is $($buildInfo.status)... Sleep for 5 seconds.."
Start-Sleep -Seconds 5 # Start sleep for 5 seconds
$buildInfo = (Invoke-RestMethod -Uri "$buildLog/$buildID" -UseDefaultCredentials -Method get) ## get status
}
Write-Output "Build Status : $($buildInfo.status)" # print build status
Write-Output "Build Result : $($buildInfo.result)" # print build result
}
请注意,我使用的是 TFS 2017 而不是 Azure DevOps Services REST API 5.0。因此,您可能需要进行一些小改动。
推荐阅读
- gps - 哪个是最简单的 NMEA 查询语句,仅用于检测 GPS 设备的存在?
- c++ - 链接器错误:无法解析构造函数
- java - 如何通过鼠标单击包含 HTML 表的 JEditorPane 获取行
- python - 对卷积层形状的计算感到困惑
- ios - CocoaPods 未正确安装
- javascript - Vue 通过 props 和 "this" 回调
- hadoop - 加入 Hive Yarn aplication_id 和 Ranger 日志审计
- excel - 将命名范围设置为整数
- elasticsearch - Hibernate Search:Elasticsearch 和 Lucene 产生不同的搜索结果
- flutter - 工具提示 onTap 而不是 onLongPress 可能吗?