簡體   English   中英

在 Azure DevOps 中並行運行的多個構建之間鎖定資源

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

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