我有一个管道(比如说A(。在其中,我编写了一个PowerShell脚本,该脚本可帮助我更新解决方案中的特定包。使用此 PowerShell 脚本将更改的代码与主分支合并后,它会自动触发另一个管道(例如 B(,其触发取决于主管道中的更改。我必须从管道 A 控制此管道 B 的触发 - 例如获取触发的管道 B 的状态,从 A 禁用管道 B 的触发等。请帮助我处理这种情况。
可以使用 powershell 任务调用构建 rest API 来获取另一个管道的状态(即。管道 B(。
首先要获取管道 B 的最新版本,可以使用下面的 rest api。
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitions}&$top={$top}&api-version=5.1
下面是 powershell 任务中的内联脚本示例,用于获取生成状态。
$uri = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?definitions={definitionId}&`$top=1&api-version=5.1"
$result =Invoke-WebRequest -Uri $uri -Method Get -ContentType "application/json" -Headers $headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
$status = $result.value[0].status
$env:SYSTEM_ACCESSTOKEN
是预定义的变量,您可以使用它直接在脚本中引用访问令牌。
若要取消管道 A 中的管道 B,可以调用更新生成 rest api。请参阅以下示例。首先从上面的 API 获取构建,然后将status
更新为cancelling
$build = $result.value[0]
$uriupdate = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($build.id)?api-version=5.1"
$build.status = "cancelling"
$body = $build | ConvertTo-Json -Depth 10
$update = Invoke-RestMethod -Uri $uriupdate -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method patch -Body $body
要在推送更改时跳过构建,只需在提交消息中包含[skip ci]
,如 Shamrai 所述。
git commit -m message [skip ci]
我必须控制从管道 A 触发此管道 B - 比如获取触发的管道B的状态,禁用触发器 来自 A 的管道 B 等。
- 可以将 REST API 与 PowerShell 结合使用来控制生成:生成 - 列表。
- 要禁用触发器,请在提交消息中添加
scip ci
:跳过单个提交的 CI
您可以在Powershell任务中使用输出变量。在此基础上,您可以控制要执行的下一个作业。这样,就不必使用多个生成管道,而是在单个管道中使用多个作业。
您可以在此处参考Microsoft文档