从另一个管道管理CI / CD管道-Azure Devops

时间:2020-06-23 08:23:51

标签: azure-devops yaml azure-pipelines

我有一条管道(说A)。在其中,我编写了一个PowerShell脚本,可帮助我更新解决方案中的特定程序包。使用此PowerShell脚本将更改的代码与master分支合并后,它将自动触发另一个管道(例如B),其触发取决于master的更改。我必须控制从管道A触发此管道B的操作-例如获取已触发管道B的状态,从A禁用管道B的触发等。请在这种情况下为我提供帮助。

3 个答案:

答案 0 :(得分:1)

我必须控制管道A从管道A的触发- 像获取触发管道B的状态一样,禁用触发 来自A等的管道B的信息。

  1. 您可以将REST API与PowerShell一起使用来控制您的构建:Builds - List
  2. 要禁用触发器,请将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_ACCESSTOKENpredefined 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]