【问题标题】:Azure DevOps pipelines resource trigger not workingAzure DevOps 管道资源触发器不起作用
【发布时间】:2021-01-15 16:35:15
【问题描述】:

我有一个 Azure DevOps 管道 (Pipeline1),它应该在另一个 (Pipeline2) 完成时触发。为此,我已经实现了文档中描述的管道资源-

但是,它根本不起作用。实际上 Pipeline2 将在创建或手动创建新 PR 时触发。我已经测试过创建新 PR,更新 PR 多次,手动运行几次,但无论我做什么 Pipeline1 都不会触发。

我尝试了 YAML 架构参考中定义的两个示例,并进一步阅读了 Trigger one pipeline after another 文档,我尝试在所有分支通配符前面加上 refs/heads/

我必须怎么做才能让它工作?

我尝试过的

没有明确定义任何branchs -
resources:
  pipelines:
    - pipeline: pipeline2
      source: Pipeline2
      trigger: true
明确定义所有branches -
resources:
  pipelines:
    - pipeline: pipeline2
      source: Pipeline2
      trigger:
        branches:
          - "*"
在所有branches 通配符前加上refs/heads/ -
resources:
  pipelines:
    - pipeline: pipeline2
      source: Pipeline2
      trigger:
        branches:
          - refs/heads/*

更新

很遗憾,pipelines 资源似乎不适用于 PR。为什么会这样,我不能告诉你。

经过进一步调查,我在 sprint 更新中偶然发现了 Incoming Webhook Service Connection。此更新来自六个月前,在撰写本文时尚未向 YAML schema reference 添加任何内容。

然而,事实证明,这个功能只是doesn't work 句号,即使这样做了,它看起来也只会触发管道的默认分支,这对我们没有好处(可能对大多数人也没有好处)用例)。

我最终确实找到了一年前的一些 documentation on GitHub,但不幸的是,这似乎只是证实了 Incoming Webhook Service Connection 在这种情况下对我们没有用处。

【问题讨论】:

  • 嗨@DavidGard,如何通过经典编辑器设置“构建完成”触发器?有用吗?
  • 不知道,恐怕我不会尝试。我们过去在混合经典和 YAML 时遇到过问题,所以我不想在这种情况下冒险。
  • 好的,@DavidGard。如果您只想在 YAML 文件中配置管道定义,则应确保已禁用或删除您通过经典编辑器设置的设置。
  • @DavidGard 是否有机会在两个存储库中对此进行了测试。我确实有完全相同的问题,似乎无法让它工作。据我所知,两个存储库中的所有默认分支都正确设置。此外,我确实在要触发的管道上遇到了触发器配置错误,但没有任何进一步的信息。

标签: azure-devops


【解决方案1】:

This answer 帮我解决了。

我有一个maindev 分支,目标管道yaml 文件还没有推送到main。目标管道中的“手动和计划构建的默认分支”必须包含源文件才能自动触发管道。 (实际触发的管道版本将是触发原始管道的分支,只要它们在同一个项目中。)我将值更改为dev并解决了它。

您可以通过转到编辑/触发器/Yaml/获取源来更改此设置:

【讨论】:

    【解决方案2】:

    对我来说是这样的

    resources:        
      pipelines:
      - pipeline: build_pipeline  
        source: kmadof.devops-manual (14)
        branch: master
        trigger:
         branches:
         - '*'
    
    steps:
    - bash: env | sort
    - task: Bash@3
      inputs:
        targetType: 'inline'
        script: |
          echo 'Hello world'
    

    所以在你的情况下,我会试试这个:

    resources:
      pipelines:
        - pipeline: pipeline2
          source: Pipeline2
          branch: master
          trigger:
            branches:
              - '*'
    

    【讨论】:

      【解决方案3】:

      Pipeline2是PR触发的,所以触发流水线运行的源分支(Build.SourceBranch)就是PR合并分支(@ 987654323@)。

      我也用你上面贴的3种方式测试过,只有第一种可以按预期工作。

      根据我的进一步调查,似乎管道资源触发器上的分支过滤器仅适用于您可以在“Repos/Branches”页面上看到的存储库分支。这些分支具有相同的前缀“refs/heads/”。 PR 合并分支 (refs/pull/{PR_ID}/merge) 似乎不包括在内。

      在您的情况下,第一种方法应该可以工作。您需要检查以下事项:

      1. 确保您已为“source”键指定正确的管道名称 Pipeline2
      2. 检查Pipeline1Pipeline2是否在同一个项目中。如果没有,请确保您已使用 'project' 键指定 Pipeline2 所在的正确项目,并确保这些项目位于同一组织中。

      【讨论】:

      • 感谢您的回复。我使用的是正确的source,并且管道在同一个项目中。如果这对 PR 不起作用,那么不幸的是,这完全是毫无意义的努力。希望这是 MS 能迅速解决的问题。
      • 嗨@DavidGard,理想情况下,第一种方式和第二种方式都适用于 PR,但根据我的测试,目前只有第一种方式有效。在您的情况下,它们都不起作用。您还可以尝试检查您是否在经典编辑器上为您的“管道1”设置了“构建完成”触发器(Edit > > triggers)。经典编辑器上设置的触发器将覆盖 YAML 文件中设置的触发器。如果您没有在经典编辑器上设置触发器,您可以尝试使用经典编辑器,看看“构建完成”触发器是否可以工作。
      猜你喜欢
      • 2020-04-24
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2022-10-25
      • 2022-11-11
      • 2021-09-17
      • 2021-01-13
      相关资源
      最近更新 更多