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

10

我有一个问题,关于Azure DevOps管道和任务,想知道是否有人可以帮忙。

我有一个管道,其中包含运行PowerShell脚本的任务。此脚本启动一个单独的管道,但一旦运行该脚本,则原始任务会返回“通过”(如预期),并且原始管道中的下一个任务将开始运行。

理想情况下,我希望管道1中的下一个任务等待由脚本启动的管道完成(并返回“通过”)。有人知道如何实现这一点吗?步骤使用YAML。到目前为止,我已经看到了等待同一管道中其他步骤的条件,但没有停止步骤直到完全分开的管道完成(并成功通过)的方法。

希望我的意思清楚。如果需要,我可以提供屏幕截图!


为什么它首先是一个单独的管道?如果您使用YAML,可以将管道拆分为多个文件,并具有使用相同步骤的单独作业。 - Daniel Mann
问题已经解决了吗?如果是的话,请接受该解决方案作为答案,这将有助于其他遇到相同问题的成员轻松找到解决方案。如果没有解决,请随时告诉我们。 - mbb5079
抱歉,我上周不在,下面的答案已被标记为解决方案!感谢所有的回复。 - Chris Duffy
3个回答

10

您可以安装Trigger Build Task扩展并使用它来触发构建,而无需使用PowerShell脚本来触发。在此扩展中,您可以选择等待触发的构建完成后再继续构建

enter image description here

在YAML中:

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

如果启用了此选项,脚本将等待所有排队的构建完成。注意:这可能需要一些时间,具体取决于您的构建情况,并且您的构建不会继续。如果您只有一个构建代理,甚至会陷入死锁状态!

1
根据描述,整个过程可以分为四个部分:
  1. 在Pipeline1中的任务1应该触发Pipeline2中的任务,如果Pipeline中的任务不可编辑,则最后可能需要创建一个新的任务以供下一步使用。

  2. Pipeline2中的最后一个任务应该做一些类似于在特定文件夹中创建txt文件或任何其他可以被Pipeline1中的任务2检测到的事情。

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

  4. 运行任务2


1
在这里你面临的主要问题是所有变量都在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 上运行您的逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接