我可以使用一个AzureDevOps管道来运行其他管道吗



我想要一个能够运行系统各个组件管道的主管道。我还希望能够单独运行这些组件的任何管道。此外,一些组件管道是使用yaml配置的,而另一些则使用经典方法。(我不确定这是否能解决这个问题。)那些使用yaml配置的作业通常包含多个作业,在这种情况下,我需要运行所有作业。

使用这里推荐的方法#2,我尝试了以下方法:

jobs:
- job: build_and_deploy
displayName: Build and Deploy
cancelTimeoutInMinutes: 1
pool:
name: some-pool
steps:
- checkout: self  
- template: component_one_pipeline.yml 
- template: component_two_pipeline.yml

我收到以下";意外值":触发器、资源、名称、变量和作业。我猜在另一个管道yaml文件的模板步骤中引用的任何yaml文件中都不允许使用这些。不过,正如我上面提到的,我需要在它们的文件中使用这些值,因为我们需要单独运行管道。

如果可能的话,有人能为我指明如何完成这项工作的方向吗?

编辑:我也尝试过这里给出的方法。我想我应该有一个主管道,它除了作为所有子管道的触发器之外,基本上什么都没做。从本质上讲,子管道应该订阅主管道,并在完成后运行。我最终得到了以下2个文件:

# master-pipeline.yml
trigger: none
pool:
name: some agent pool
steps:
- script: echo Running MASTER PIPELINE
displayName: 'Run master pipeline'
#child-pipeline.yml
trigger: none
#- testing-branch  (tried these combinations trying to pick up master run)
#- main
pool:
name: some agent pool

resources:
pipelines:
- pipeline: testing_master_pipeline
source: TestingMasterPipeline
trigger: true
steps:
- script: echo Running CHILD PIPELINE 1
displayName: 'Run Child Pipeline 1'

不幸的是,它不起作用。我没有得到任何异常,但当我手动运行主管道时,子管道没有运行。有什么想法吗?

提前谢谢。

您将工作与Azure DevOps构建触发联系起来的方法通常是,构建完成可以触发另一个构建,并且必须触发构建中的触发器。因此:

  1. Yaml模板不能有触发器之类的东西,所以它们在这里对您没有真正的帮助(当然,您可以将任何单独的管道拆分为模板)。触发器位于主yaml管道fail中,该管道引用模板文件。因此,不能将单个组件管道作为模板。

  2. Yaml管道可以与第一个链接中提到的资源声明链接在一起。它的工作方式是,资源声明在要触发的管道中,并配置条件(如分支过滤器:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/pipeline-triggers?view=azure-devops#分支过滤器)到要触发的管道。例如,在组件管道中,您将主管道声明为资源,并设置触发组件管道的条件,例如针对/release/*branch运行主管道时。或者只需将触发器设置为true,就可以从主管道的任何成功运行中触发组件管道。组件管道在管道声明开始时仍然可以有自己的管道触发器。

  3. 经典构建定义也可以通过编辑构建定义链接->触发器->构建完成(例如,请参见此处:https://jpearson.blog/2019/03/27/chaining-builds-in-azure-devops/)。这与yaml管道的工作方式相同;您配置了要触发的经典管道的条件,因此将主管道作为触发器添加到组件管道中。同样,您也可以为组件管道设置管道触发器。

这里的限制是,经典管道可以由yaml管道触发,但不能反过来。yaml资源声明中也有类似的限制;它们不能由经典管道触发。如果你需要这样的触发;"本地";触发还不够,当然可以在任何一种类型的管道中调用Azure DevOps API来触发任何管道。请参阅:https://blog.geralexgr.com/cloud/trigger-azure-devops-build-pipelines-using-rest-api,或者只搜索azure-devops-rest-api以及通过powershell、rest-api-task或其他方式触发该api的相关博客文章。

事实证明,我需要将管道的默认分支设置为我正在测试的分支,以便正常工作。我原来帖子中的代码运行良好。

如果遇到此问题,并且正在使用测试分支测试管道,请查看此处有关如何配置管道以侦听分支上的触发器的信息。显然,管道只在其默认分支上侦听它们。注意:链接中的示例使用";经典的";以管道配置为例,但您可以通过单击右侧的3个点并选择";触发器">

希望这能帮助到别人。

最新更新