Azure DevOps管道任务等待运行以完成另一个管道

时间:2019-12-03 17:03:51

标签: azure azure-devops yaml azure-pipelines pipeline

我对Azure DevOps管道和任务有疑问,想知道是否有人可以提供帮助。

我有一个运行任务的管道,该任务运行PowerShell脚本。该脚本启动了单独的管道,但是一旦运行了该脚本,原始任务将返回“通过”(按预期方式),并且原始管道中的下一个任务开始运行。

理想情况下,我希望管道1中的下一个任务等待,直到脚本启动的管道完成(并返回通过)。有谁知道可以做到这一点的方法?这些步骤正在使用YAML。到目前为止,我已经看到有条件等待同一管道中的其他步骤,但是没有什么可以阻止某个步骤运行,直到完全独立的管道完成(并成功通过)。

希望我有道理。如果可以的话,我可以提供屏幕截图!

3 个答案:

答案 0 :(得分:0)

使用PowerShell脚本触发构建后,您可以安装Trigger Build Task扩展名并使用它。在那里,您可以选择等待直到触发的构建完成,然后再继续构建

enter image description here

在YAML中:

- task: TriggerBuild@3
  displayName: 'Trigger a new build of Test'
  inputs:
    buildDefinition: Test
    waitForQueuedBuildsToFinish: true
    waitForQueuedBuildsToFinishRefreshTime: 60
  

如果启用此选项,则脚本将等待直到所有排队的构建完成。注意:这可能需要一段时间,具体取决于您的构建,并且构建将不会继续。如果您只有一个构建代理,您甚至将陷入僵局!

答案 1 :(得分:0)

根据说明,整个过程可以分为四个部分:

  1. Pipeline1中的task1应该触发Pipeline2中的任务,如果Pipeline中的任务不可编辑,则可能最后需要在其中创建一个新任务以供下一步使用

  2. Pipeline2中的最后一个任务应该执行类似的操作,例如在特定文件夹中创建txt文件或Pipeline1中task2可以检测到的其他任何事情

  3. Pipeline1中的task2应该等待并监听是否在文件夹中创建了txt文件,这意味着Pipeline1成功完成了。

  4. 运行任务2

答案 2 :(得分:0)

您在这里面临的主要问题是所有变量都在使用YAML的队列中求值。

您可以做一些事情,例如利用外部服务,例如Azure存储帐户。这样,您还可以执行其他操作,例如将注释或状态从管道写入文本文件,然后将值读入第一个管道。

在管道1中脚本1的末尾

Do {
   $File = check for storage account file
   if ($File) {
      $FileExists = $true
   }
} until ($FileExists)

在其他管道的结尾

Do stuff
Write stuff to file
Upload file to storage account

如果您只想等待完成,则可以在Powershell第一步的最后使用azure devops cli。这是一个很好的链接:https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/Get-Azure-Pipeline-Build-Status-with-the-Azure-CLI/ba-p/472104。您可以对返回的statusresult

运行逻辑