Azure管道重新运行失败的任务(不是整个阶段)

Azure管道重新运行失败的任务(不是整个阶段),azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,Azure DevOps管道是否只支持重新运行失败的任务,而不支持重新运行整个阶段 例如,我们有部署到测试环境阶段,它由多个任务组成 为了简化描述,我们假设只有两个任务:第一个任务执行一些SQL语句,第二个任务执行一些UNIX脚本 如果UNIX任务失败,我不想重新运行SQL任务。不幸的是,没有办法只重新运行任务,但是有一种解决方案(变通方法)适合您的场景,您可以将SQL任务和UNIX任务分为两个不同的作业,而不是在作业中通过许多步骤构建管道的这个特定阶段,使它们相互依赖,因此,如果一个失败,它将

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

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

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


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

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

...
jobs: 
- job: SQLJob
  steps:
  - task: RunSomeSQLScripts
- job: UnixJob
  dependsOn: 
  - SQLJob
  steps:
  - task: RunSomeUnixScripts
... 
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任务和Unix任务拆分为两个不同的作业,并使它们相互依赖,这样,如果一个作业失败,它将不会执行另一个作业,而不是在作业中使用许多步骤来构建管道的这一特定阶段。举个例子:

...
jobs: 
- job: SQLJob
  steps:
  - task: RunSomeSQLScripts
- job: UnixJob
  dependsOn: 
  - SQLJob
  steps:
  - task: RunSomeUnixScripts
... 
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
如果需要在作业之间共享文件,则可以将其作为工件发布;如果需要在前一个作业中生成一些变量并在第二个作业中使用,则可以使用输出变量:

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

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

对于解决方法:

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

以下是一个例子:

...
jobs: 
- job: SQLJob
  steps:
  - task: RunSomeSQLScripts
- job: UnixJob
  dependsOn: 
  - SQLJob
  steps:
  - task: RunSomeUnixScripts
... 
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站点中的建议票证:

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

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

对于解决方法:

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

以下是一个例子:

...
jobs: 
- job: SQLJob
  steps:
  - task: RunSomeSQLScripts
- job: UnixJob
  dependsOn: 
  - SQLJob
  steps:
  - task: RunSomeUnixScripts
... 
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站点中的建议票证: