簡體   English   中英

Azure 管道重新運行失敗的任務(不是整個階段)

[英]Azure pipeline re-run failed task (not entire stage)

Azure DevOps 管道是否僅支持重新運行失敗的任務而不支持重新運行整個階段?

例如,我們有部署到測試環境階段,它由多個任務組成。

為了簡化描述,我們假設只有 2 個任務:第一個任務執行一些 SQL 語句,第二個任務執行一些 UNIX 腳本。

如果 UNIX 任務失敗,我不想重新運行 SQL 任務。

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 站點中的建議票: 重新運行失敗的構建任務/步驟

不幸的是,沒有辦法只重新運行任務,但是對於您的場景有一個解決方案(解決方法),而不是在作業中使用許多步驟構建管道的這個特定階段,您可以拆分您的 SQL 任務和Unix 任務在兩個不同的作業中,並使它們相互依賴,因此如果一個失敗,它將不會執行另一個這是一個示例:

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

如果您需要在作業之間共享文件,您可以將它們發布為工件,如果您需要在以前的作業中生成一些變量並在第二個作業中使用,您可以使用 output 變量: https://docs.microsoft.com /zh-CN/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM