【问题标题】:Azure pipeline re-run failed task (not entire stage)Azure 管道重新运行失败的任务(不是整个阶段)
【发布时间】:2021-05-12 20:06:58
【问题描述】:

Azure DevOps 管道是否只支持重新运行失败的任务而不支持整个阶段?

例如,我们有部署到测试环境阶段,它由多个任务组成。

为了简化描述,我们假设只有两个任务:第一个任务执行一些 SQL 语句,第二个任务执行一些 UNIX 脚本。

如果 UNIX 失败,我不想重新运行 SQL 任务。

【问题讨论】:

    标签: azure azure-devops azure-pipelines


    【解决方案1】:

    Azure DevOps 管道是否只支持重新运行失败的任务而不支持整个阶段?

    恐怕没有现成的方法可以满足您的要求。

    解决方法:

    您可以尝试在任务条件下使用变量:SYSTEM.STAGEATTEMPT。该变量用于记录阶段运行的数量。

    这是一个例子:

    stages:
    - stage: QA
      jobs:
      - job: test
        steps:
          - task: PowerShell@2
            condition:  eq(variables['SYSTEM.STAGEATTEMPT'], '1')
            inputs:
              targetType: 'inline'
              script: |
                # Write your PowerShell commands here.
                
                Write-Host "Hello World"
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: |
                xxxx
    

    结果:

    您可以为 SQL 任务设置此条件,然后该任务将仅在第一阶段运行时运行。

    当您重新运行失败的阶段时,SQL 任务将跳过。

    另一方面,你的要求是有道理的。

    这是我们 UserVoice 网站中的建议票:Rerun failed build task/step

    【讨论】:

      【解决方案2】:

      不幸的是,没有办法只重新运行任务,但是有一个适合您的方案的解决方案(解决方法),而不是在作业中使用许多步骤构建管道的这个特定阶段,您可以拆分您的SQL 任务和 Unix 任务在两个不同的作业中,并使它们相互依赖,因此如果一个失败,它将不会执行另一个示例:

      ...
      jobs: 
      - job: SQLJob
        steps:
        - task: RunSomeSQLScripts
      - job: UnixJob
        dependsOn: 
        - SQLJob
        steps:
        - task: RunSomeUnixScripts
      ... 
      

      如果您需要在作业之间共享文件,您可以将它们发布为工件,如果您需要在之前的作业中生成一些变量并在第二个作业中使用,您可以使用输出变量:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 2022-08-10
        • 2021-03-25
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多