我有一条管道(说A)。在其中,我编写了一个PowerShell脚本,可帮助我更新解决方案中的特定程序包。使用此PowerShell脚本将更改的代码与master分支合并后,它将自动触发另一个管道(例如B),其触发取决于master的更改。我必须控制从管道A触发此管道B的操作-例如获取已触发管道B的状态,从A禁用管道B的触发等。请在这种情况下为我提供帮助。
答案 0 :(得分:1)
我必须控制管道A从管道A的触发- 像获取触发管道B的状态一样,禁用触发 来自A等的管道B的信息。
scip ci
添加到您的提交消息中:Skipping CI for individual commits 答案 1 :(得分:1)
您可以在powershell任务中使用输出变量。基于此,您可以控制要执行的下一个作业。这样,您不必在单个管道中使用多个构建管道,而不必使用多个作业。
您可以参考Microsoft文档here
答案 2 :(得分:1)
您可以使用powershell任务调用build rest api来获取另一个管道(即管道B)的状态。
首先要获得最新版本的Pipeline 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
是predefined variable,您可以使用它直接在脚本中引用访问令牌。
要取消管道A中的管道B,可以调用update Build 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
要在推送更改时跳过构建,只需在Shamrai提到的提交消息中包含[skip ci]
。
git commit -m message [skip ci]