【问题标题】:Use of Azure DevOps pipeline completion trigger when triggering pipeline has a failure触发管道失败时使用 Azure DevOps 管道完成触发器
【发布时间】:2022-10-25 13:59:51
【问题描述】:

是否可以从管道完成触发器如果出现故障触发管道?根据文档,默认情况下似乎没有可用的配置/属性。只是想检查管道完成触发器是否有任何可能的方法。

【问题讨论】:

    标签: azure azure-devops azure-pipelines


    【解决方案1】:

    如果初始管道未能触发,则所有后续管道在逻辑上都将无法触发。尝试让您的初始管道从一个永远不会失败的阶段开始,如果该管道失败,您可以将其设置为在第一个管道失败但成功触发后触发后续管道。

    【讨论】:

    • 我有点不清楚。假设我有 A(触发管道)和 B(触发管道)管道。无论管道 A 的状态如何,我都需要使用管道完成触发器来触发 B。即管道 A 可以是成功的,也可以有一个或多个失败的步骤。
    • 有一种方法可以通过在管道触发器中使用管道阶段和阶段文件管理器来完成此工作。我猜乔是在建议这种方法。是的!我们可以有一个永远不会失败的阶段,在那个阶段,我们可以触发我们想要的下一个管道:)
    • 谢谢你的线索!我的要求现在已排序:)
    • 就是这样,很高兴你明白
    • 我自己做过并问了同样的问题,这是我的解决方案
    【解决方案2】:

    如果触发管道出现故障,是否可以从管道完成触发器触发另一个管道?

    如果触发管道发生故障,则没有此类配置/属性可用于从管道完成触发器触发另一个管道。

    为了解决这个问题,您可以尝试添加powershell任务以使用REST API Builds - Queue

    POST https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=6.1-preview.7
    

    您可以查看this thread 以获取详细脚本。

    并使用条件Only when a previous task has failed 设置此 powershell 任务:

    在这种情况下,无论之前的任务是否失败,都会在管道结束时调用 REST API 来触发构建。

    【讨论】:

    • 感谢您的回复,但我正在寻找一种仅使用管道触发器的方法。当我们在触发管道中使用阶段时,这是可能的。 :)
    【解决方案3】:

    我能够通过管道完成触发器本身来管理我的需求。如果我们在触发管道中定义阶段是可能的。如果其他人正在寻找相同的方法,我将发布答案。

    1. 需要用阶段定义触发管道定义。此外,我们需要确保每次至少有一个阶段成功。我已经定义了几个阶段,因此这完全符合我的要求。

      触发管道 YAML 定义:(管道名称:pipeline1)

      trigger: none
      pr: none
      
      pool:
        vmImage: 'ubuntu-latest'
      
      stages:
        - stage: stage_1
          displayName: Stage-1
          jobs:
            - job: greeting
              displayName: Greeting
              steps:
                - script: |
                    echo "Hello world!"
                    exit 1
      
        - stage: stage_2
          displayName: Stage-2
          condition: always()
          jobs:
            - job: thanking
              displayName: Thanking
              steps:
                - script: |
                    echo "Thank you!"
      
    2. 定义管道完成触发器阶段过滤器对于触发的管道。

      触发管道 YAML 定义:

      trigger: none
      pr: none
      
      resources:
        pipelines:
          - pipeline: Pipeline_1
            source: pipeline1
            trigger:
              stages:
                - stage_1
      
      pool:
        vmImage: 'ubuntu-latest'
      
      jobs:
        - job: greeting
          steps:
            - script: |
                echo "Hello world!"
      

      然后触发管道将被触发而不管阶段1在触发管道中,因为stage_2每次运行都会保持成功。

    【讨论】:

    • 但这会在触发管道中的 stage_1 完成后立即触发触发管道,对吗?因此,如果触发的管道依赖于触发管道的 stage_2 的结果,您可能会在这里遇到竞争条件,不是吗?
    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    相关资源
    最近更新 更多