分享方式:


管線執行

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

本文說明 Azure Pipelines 管線執行中的活動順序。 執行 (run) 代表管線的一個執行作業。 持續整合 (CI) 和持續傳遞 (CD) 管線都包含執行。 在執行期間,Azure Pipelines 會處理管線,而 代理程式會 處理一或多個 作業、步驟和工作

顯示管線概觀的圖表。

針對每個回合,Azure Pipelines:

  • 處理管線。
  • 要求一或多個代理程序執行作業。
  • 將作業交給代理程式並收集結果。

針對每個作業,代理程式:

  • 準備作業。
  • 執行作業中的每個步驟。
  • 報告結果。

作業可能會成功、失敗、取消或未完成。 了解這些結果可協助您針對問題進行疑難解答。

下列各節將詳細說明管線執行程式。

管線處理

顯示展開YAML範本的圖表。

若要處理執行的管線,請先執行 Azure Pipelines:

  1. 展開範本並評估範本運算式
  2. 評估階段層級的相依性,以挑選要執行的第一個階段。

針對它選取要執行的每個階段,Azure Pipelines:

  1. 收集並驗證所有作業資源,以授權執行。
  2. 評估作業層級的相依性,以挑選要執行的第一個作業。

Azure Pipelines 會針對它選取的每個作業執行下列活動:

  1. 將 YAML strategy: matrixstrategy: parallel多重組態擴充至多個運行時間作業。
  2. 評估條件,以判斷作業是否符合執行資格。
  3. 要求每個合格作業的代理程式。

當運行時間作業完成時,Azure Pipelines 會檢查是否有符合執行資格的新作業。 同樣地,當階段完成時,Azure Pipelines 會檢查是否有更多階段。

變數

瞭解處理順序會釐清為何您無法在範本參數中使用特定變數。 第一個範本擴充步驟只會在 YAML 檔案的文字上運作。 在該步驟期間,運行時間變數尚未存在。 在此步驟之後,範本參數已經解決。

您也無法使用 變數 來解析服務連線或環境名稱,因為管線會在階段開始執行之前授權資源。 階段和作業層級變數尚無法使用。 變數群組本身是受限於授權的資源,因此在檢查資源授權時無法使用其數據。

您可以使用管線資源定義中明確包含的管線層級變數。 如需詳細資訊,請參閱 管線資源元數據作為預先定義的變數

客服專員

當 Azure Pipelines 需要執行作業時,它會向集區要求代理程式。 此程序的運作 方式與Microsoft裝載自我裝載 的代理程式集區不同。

注意

伺服器作業 不會使用集區,因為它們會在 Azure Pipelines 伺服器本身上執行。

顯示集區選取範圍的圖表。

平行作業

首先,Azure Pipelines 會檢查組織的 平行作業。 服務會在所有代理程式上加總所有執行中的作業,並與授與或購買的平行作業數目進行比較。

如果沒有可用的平行位置,作業必須等候位置釋放。 一旦有平行位置可供使用,作業就會路由傳送至適當的代理程序類型。

Microsoft 裝載的代理程式 \(英文\)

就概念上來說,Microsoft裝載的集區是一個全域計算機集區,雖然它實際上有許多不同的集區會依地理位置和操作系統類型分割。 根據要求的 YAML vmImage 或傳統編輯器集區名稱,Azure Pipelines 會選取代理程式。

Microsoft集區中的所有代理程式都是從未執行任何管線的新虛擬機(VM)。 作業完成時,會捨棄代理程式 VM。

自我裝載式代理程式

一旦有平行位置可供使用,Azure Pipelines 會檢查相容代理程式的自我裝載集區。 自我裝載代理程式提供 功能,指出已安裝或設定特定軟體。 管線有 需求,這是執行作業所需的功能。

如果 Azure Pipelines 找不到符合管線需求的免費代理程式,作業會繼續等候。 如果集區中沒有任何代理程式符合需求,作業就會失敗。

自我裝載代理程式通常會從執行重複使用到執行。 對於自我裝載的代理程式,管線作業可能會有副作用,例如將快取熱身或擁有本機存放庫中已有大部分的認可。

作業準備

代理程式接受作業之後,它會執行下列準備工作:

  1. 下載執行作業所需的所有工作,並快取這些工作以供日後使用。
  2. 在磁碟上建立工作空間,以保存執行中使用的原始程式碼、成品和輸出。

步驟執行

代理程式會依序執行步驟。 在步驟可以開始之前,必須先完成或略過所有先前的步驟。

顯示執行每個工作的圖表。

步驟是由工作實作,這些工作可以是Node.js、PowerShell 或其他腳本。 工作系統會將輸入和輸出路由傳送至備份腳本。 工作也提供常見的服務,例如改變系統路徑和建立新的 管線變數

每個步驟都會在自己的進程中執行,將環境與先前的步驟隔離。 由於此每個步驟的程式模型,因此不會在步驟之間保留環境變數。 不過,工作和腳本可以使用稱為 記錄命令 的機制來與代理程序通訊。 當工作或腳本將記錄命令寫入標準輸出時,代理程式會採取命令要求的任何動作。

您可以使用記錄命令來建立新的管線變數。 管線變數會在下一個步驟中自動轉換成環境變數。 腳本可以使用 的值myValue來設定新的變數myVar,如下所示:

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

結果報告和集合

每個步驟都可以報告警告、錯誤和失敗。 步驟會藉由將工作標示為問題成功,或在管線摘要頁面上報告錯誤和警告,或將工作標示為失敗來回報失敗。 如果步驟使用 ##vso 命令明確報告失敗,或以非零結束代碼結束腳本,步驟就會失敗。

當步驟執行時,代理程式會持續將輸出行傳送至 Azure Pipelines,因此您可以看到控制台的即時摘要。 在每個步驟結束時,步驟的整個輸出都會上傳為記錄檔。 您可以在管線完成之後下載記錄檔。

顯示記錄和結果如何從代理程式流向服務的圖表。

代理程式也可以上傳 成品測試結果,這些成品也可以在管線完成之後使用。

狀態和條件

代理程式會追蹤每個步驟的成功或失敗。 當步驟成功併發生問題或失敗時,作業的狀態會更新。 作業一律會反映其每個步驟中最差的結果。 如果步驟失敗,作業也會失敗。

在代理程式執行步驟之前,它會檢查該步驟 的條件 ,以判斷該步驟是否應該執行。 根據預設,只有在作業的狀態成功或發生問題時,才會執行步驟,但您可以設定其他條件。

許多作業都有需要執行的清除步驟,而不論發生什麼情況,它們都可以指定的條件 always()。 清除或其他步驟也可以設定為只在取消時執行。

成功的清除步驟無法儲存作業失敗。 輸入失敗之後,作業永遠無法回到成功狀態。

逾時和中斷連線

每個作業都有逾時。 如果作業未在指定時間內完成,伺服器就會取消作業。 伺服器會嘗試發出代理程式停止的訊號,並將作業標示為已取消。 在代理程式端,取消表示取消所有剩餘的步驟,並上傳任何剩餘的結果。

作業的寬限期稱為取消逾時,用來完成任何取消工作。 您也可以標記即使在取消時執行的步驟。 在作業逾時加上取消逾時之後,如果代理程式未報告該工作已停止,伺服器會將作業標示為失敗。

如果代理程式的主電腦失去電源或已關閉,或發生網路失敗,代理程式機器可以停止回應伺服器。 為了協助偵測這些狀況,代理程式每分鐘傳送一次活動訊號訊息,讓伺服器知道它仍在運作。

如果伺服器連續五分鐘未收到活動訊號,則會假設代理程式不會傳回。 作業標示為失敗,讓使用者知道他們應該重試管線。

透過 Azure DevOps CLI 管理執行

您可以使用 Azure DevOps CLI 中的 az pipelines 執行來管理管線執行。 若要開始使用,請參閱 開始使用 Azure DevOps CLI。 如需完整的命令參考,請參閱 Azure DevOps CLI 命令參考

下列範例示範如何使用 Azure DevOps CLI 列出專案中的管線執行、檢視特定執行的詳細數據,以及管理管線執行的標籤。

必要條件

  • 已安裝 Azure DevOps CLI 擴充功能的 Azure CLI,如開始使用 Azure DevOps CLI 中所述。 使用 az login登入 Azure。
  • 使用 az devops configure --defaults organization=<YourOrganizationURL>設定的預設組織。

列出管線執行

使用 az pipelines runs list 命令,列出專案中的管線執行。

下列命令列出前三個管線執行的狀態為 已完成 且結果 成功,並以數據表格式傳回結果。

az pipelines runs list --status completed --result succeeded --top 3 --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  ------
125       20200124.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 18:56:10.067588  manual
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual
122       20200123.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:48:05.574742  manual

顯示管線執行詳細數據

使用 az pipelines run show 命令,在您的項目中顯示管線執行的詳細數據。

下列命令會顯示標識碼為 123 的管線執行詳細數據、以數據表格式傳回結果,並將網頁瀏覽器開啟至 Azure Pipelines 組建結果頁面。

az pipelines runs show --id 122 --open --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  --------
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual

將標籤新增至管線執行

使用 az pipelines run tag add 命令,將標籤新增至專案中的管線執行。

下列命令會將 YAML 標籤新增至具有識別碼 123 的管線執行,並以 JSON 格式傳回結果。

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

列出管線執行標籤

使用 az pipelines run tag list 命令,列出專案中管線執行的標籤。 下列命令會列出標識碼 為 123 的管線執行標記,並以數據表格式傳回結果。

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

從管線執行中刪除標籤

使用 az pipelines run tag delete 命令,從專案中的管線執行中刪除 標籤。 下列命令會從標識碼為 123 的管線執行中刪除 YAML 標籤。

az pipelines runs tag delete --run-id 123 --tag YAML