Azure DevOps Pipeline:Stages、Jobs、Steps 執行機器全解析

5 分鐘閱讀

琳 avatar

For azure devops pipeline, Do jobs run on the same machine?
Do steps run on the same machine?
Do stages run on the same machine?

Do I have to write them in the same job if those tasks must run on the same machine?

Felo Search avatar
Felo Search

在 Azure DevOps Pipeline 中,不同層級的任務在機器上的執行方式有明確的規則。以下詳細說明 stages、jobs 和 steps 的執行機制。

Steps 在同一機器上執行

Steps 必定在同一台機器上執行。同一個 job 中的所有 steps/tasks 都會在同一個 agent 機器上執行1。每個 step 在自己的 process 中執行,並且可以存取 agent 上的 pipeline workspace2。這意味著環境變數不會在 steps 之間保留,但檔案系統的變更會被保留2

Jobs 可能在不同機器上執行

Jobs 預設會平行執行,可能在不同的機器上。除非設定了 dependsOn 值,否則 Azure DevOps YAML pipeline 中的 jobs 會平行執行3。每個 agent 一次只能執行一個 job13

如果您需要確保多個 jobs 在同一台 agent 上執行,可以使用 demands 和 capabilities 機制4。重要的是使用每個建構 agent 獨有的 capability,這樣可以確保特定 stage 中的所有 jobs 都在同一個 agent 上執行4

Stages 在不同機器上執行

Stages 預設會在不同的機器上執行。每個 stage 在 Azure DevOps pipeline 中都會在獨立的 agent 上執行,並且預設會獲得唯一的工作目錄5。例如,stage 1 的工作資料夾是 _work/1/s,而 stage 2 的工作資料夾是 _work/2/s5

這種設計確保了隔離性,防止 stages 之間的檔案衝突5。Azure DevOps 為每個 stage 分配新的臨時工作資料夾,因為 agents 可以平行執行、在不同機器上執行,或在不同時間執行5

在 Stages 之間共享檔案

如果需要在 stages 之間傳遞檔案,應該使用 artifacts 機制5:

  1. 在 stage 1 結束時使用 PublishBuildArtifactsPublishPipelineArtifact task 上傳檔案
  2. 在 stage 2 中使用 DownloadPipelineArtifact task 下載這些檔案到自己的工作目錄5

必須在同一機器上執行的任務配置

是的,如果任務必須在同一台機器上執行,您需要將它們寫在同一個 job 中1。這是確保任務在同一個 agent 上執行的最可靠方式。

如果您有多個 jobs 需要在同一台機器上執行,可以:

總結來說,Azure DevOps Pipeline 的執行層級從小到大為:steps(同一機器)→ jobs(可能不同機器)→ stages(不同機器)。如果需要確保任務在同一台機器上執行,最簡單的方式就是將它們放在同一個 job 中。

  1. Azure DevOps YAML Pipelines - Part 7 - Nathan Nellans ↩2 ↩3

  2. steps definition - Azure Pipelines - Microsoft Learn ↩2

  3. Jobs in Azure Pipelines - Microsoft Learn ↩2

  4. Ensure dependent jobs run in the same self hosted agent ↩2 ↩3

  5. Why are my two stages running on different work folder ↩2 ↩3 ↩4 ↩5 ↩6

  6. Stages in Azure Pipelines - Microsoft Learn