[英]Lock resources between multiple builds that run parallel in Azure DevOps
假設我有一個構建:
Job1:
Task1: Build
Job2:
dependsOn: Job1
Task2: Test
並且測試任務使用某種數據庫,或其他獨特的資源。
我想知道是否有可能,當多個構建並行運行時,鎖定 Job2 以運行唯一而不其他構建嘗試訪問相同的資源。
我正在使用 cmake 和 ctest,所以我知道我可以在使用RESOURCE_LOCK的單獨單元測試之間做類似的事情,但我確信我將無法在多個 ctest 進程之間鎖定該資源。
同意@MarTin 的解決方法。 在Job1
中使用 powershell 任務設置一個變量,然后獲取此變量並在Job2
的工作條件中使用它。
您不需要使用 API 添加全局變量。 您可以嘗試另一種更簡單的方法: Output variables 。 我們擴展了一個功能,客戶可以配置一個 output 變量並在下一個作業中訪問此 output 變量,這取決於第一個作業。
Job1中設置output變量的樣例:
##vso[task.setvariable variable=firstVar;isOutput=true]Job2 Need skip
然后從 Job2 中的 Job1 中獲取 output 變量:
Job2Var: $[dependencies.Job1.outputs['outputVars.firstVar']]
然后,在 job2 中,您可以將其用於工作條件:
condition: eq(dependencies.Job1.outputs['outputVars.firstVar'], 'Job2 Need skip')
完成的簡單示例腳本如下所示:
jobs:
- job: Job1
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'echo "##vso[task.setvariable variable=firstVar;isOutput=true]Need skip Job2"'
name: outputVars
- job: Job2
dependsOn: Job1
variables:
Job2Var: $[dependencies.Job1.outputs['outputVars.firstVar'], 'Need skip Job2']
steps:
...
...
我要表達的邏輯是根據Job1
和當前管道執行 state 為 output 變量動態賦值。 一個特定的值表示Job2
應該被鎖定,這意味着跳過它的執行。 在Job2
的條件表達式中,當得到的值$[dependencies.Job1.outputs['outputVars.firstVar']
滿足預定義的期望值時,跳過當前 Job2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.