Azure管道重新运行失败的任务(不是整个阶段)
Azure DevOps管道是否只支持重新运行失败的任务,而不支持重新运行整个阶段 例如,我们有部署到测试环境阶段,它由多个任务组成 为了简化描述,我们假设只有两个任务:第一个任务执行一些SQL语句,第二个任务执行一些UNIX脚本Azure管道重新运行失败的任务(不是整个阶段),azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,Azure DevOps管道是否只支持重新运行失败的任务,而不支持重新运行整个阶段 例如,我们有部署到测试环境阶段,它由多个任务组成 为了简化描述,我们假设只有两个任务:第一个任务执行一些SQL语句,第二个任务执行一些UNIX脚本 如果UNIX任务失败,我不想重新运行SQL任务。不幸的是,没有办法只重新运行任务,但是有一种解决方案(变通方法)适合您的场景,您可以将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站点中的建议票证: