[英]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.