链接Azure DevOps管道

时间:2020-10-20 07:04:18

标签: azure-devops

我希望下面的Azure DevOps管道在两个资源管道成功构建了相同的master提交时自动触发。这可能吗?现在,它会在管道之一完成时触发,导致两次运行。

trigger: none
pr: none

resources:
  pipelines:
    - pipeline: "buildPipeline1"
      source: "BuildPipeline1"
      trigger:
        branches:
        - master

    - pipeline: "buildPipeline2"
      source: "BuildPipeline2"
      trigger:
        branches:
        - master

2 个答案:

答案 0 :(得分:1)

现在这不可能。如果有任何定义的触发通过,您的管道将触发。因此,如果您需要这样的东西,则需要使用webhooks进行构建。例如,当管道成功时,您可以调用Azure函数。在某种数据库或其他状态形式中保持跟踪,即为提交32563456运行了管道A,然后在为相同的提交运行了管道B并且通知了您的函数时,您将从Azure Function触发该管道。

我知道这听起来需要做很多工作,但是不支持开箱即用。

答案 1 :(得分:1)

对不起,暂时不可能。

对于管道触发,我们只能在另一个完成时触发管道,将触发管道指定为管道资源。

您可以在此处参考我们的官方文档- Trigger one pipeline after another

我能碰到的唯一解决方法是,在两个管道的末尾添加一个任务,并在成功构建和构建相同的提交后查询另一个管道的状态。

最后,我们可以添加任务功能外壳并添加脚本以调用REST API,以根据先前的任务结果将构建/任何其他管道排队。

$connectionToken="PAT"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PipelineUrl = "https://dev.azure.com/{Org name}/{project name}/_apis/pipelines/{Pipeline ID}/runs?api-version=6.0-preview.1" 

$body ="{ 
 `"resources`":{
        `"repositories`":{
            `"self`":{`"refName`":`"refs/heads/master`"
            }
         }
    }
}"
$Pipelines = Invoke-RestMethod -Uri $PipelineUrl -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST