繁体   English   中英

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

[英]Azure DevOps pipeline task to wait to run for another pipeline to complete

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

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

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

希望我是有道理的。 如果这也有帮助,我可以提供屏幕截图!

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

在此处输入图片说明

在 YAML 中:

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

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

根据描述,整个过程可以分为四个部分:

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

  2. Pipeline2 中的最后一个任务应该做一些事情,比如在特定文件夹中创建一个 txt 文件或任何其他可以被 Pipeline1 中的 task2 检测到的东西

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

  4. 运行任务2

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM