Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道

Posted

技术标签:

【中文标题】Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道【英文标题】:Azure DevOps Pipelines - run YAML pipeline only when previous run was successful 【发布时间】:2021-08-16 07:58:55 【问题描述】:

我在 Azure DevOps Pipelines 中有一个构建管道(在 yaml 中定义),它有一个每晚执行的 cron 触发器。有时管道运行失败,需要手动重新运行或清理。在这种情况下,如果之前的执行尚未成功完成,我希望触发器不要再次触发。

如果无法在触发器本身上进行配置,我也可以编写一个简单的任务,作为管道中的第一步运行。但是到目前为止我还没有看到一个好方法怎么做?

管道可以访问其自己的构建定义 ID,但我看到访问以前运行的唯一方法是通过 ADO CLI - 这会产生执行 Azure 服务原则现在需要 ADO 项目权限的问题.

感谢任何想法!

【问题讨论】:

你说的是触发一个接一个的管道吗?如果是这样,这里是指向ms docs 的链接 没有。管道每晚都会在 cron 触发器上触发 - 彼此独立 【参考方案1】:

好的,经过反复试验,我构建了一个基于 ADO CLI 的解决方案。作为第一步,我将此任务集成到我的管道中

  - job: checkpipelinestatejob
    displayName: 'Check Pipeline state'
    condition: and(succeeded(), eq(variables['Build.Reason'], 'Schedule')) # only check this for scheduled runs (by cron-trigger)
    steps:
    - task: PowerShell@2
      name: 'checkPreviousPipelineRun'
      displayName: 'Check previous pipeline run status'
      env:
          AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
      inputs:
        targetType: inline
        script: |

          # Login to Azure DevOps Extension is happening automatically using ENV AZURE_DEVOPS_EXT_PAT which is set above
          # Set default Azure DevOps organization and project
          az devops configure --defaults organization=$(System.TeamFoundationCollectionUri) project=$(System.TeamProject) --use-git-aliases true

          # List last pipeline runs (just for easier debugging)
          echo "*** Last five runs of this pipeline:"
          az pipelines runs list --pipeline-ids $(System.DefinitionId) --status all --top 5 --output table

          # Fetch result of the previous scheduled run (--top 1)
          $previousRunResult = $(az pipelines runs list --pipeline-ids $(System.DefinitionId) --status completed --reason schedule --top 1 --query "[].result" -o tsv)

          echo "*** Previous scheduled run of this pipeline was completed with status: $previousRunResult"

          if($previousRunResult -eq "failed")
          
            throw "*** Previous scheduled pipeline run did not complete successfully. Not running another pipeline. Please cleanup manually and retry."
          

【讨论】:

以上是关于Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps Pipelines 上的 Android SDK 构建工具

Azure DevOps Pipelines 中的条件阶段执行

如何在 Azure DevOps Pipelines 上指定 Android SDK 构建工具版本

Azure DevOps -> Pipelines -> Library -> 访问 Azure Key Vault -> Key Vault 不允许从所有网络访问

Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道

在 Azure DevOps Git 存储库中使用来自 Azure Pipelines 的 Python 包版本标记 Git 存储库