在現代軟體開發實務中,持續整合(CI)與持續部署(CD)是確保交付速度與品質的關鍵實踐。Azure Pipelines 作為 Azure DevOps 平台的核心服務,提供了一套完整工具鏈,用以自動化從程式碼提交到部署的整個生命週期。其核心理念是透過標準化、可重複的流程,將構建、測試與發布環節串聯,有效降低人為錯誤並縮短反饋迴圈。本文將深入探討如何利用其經典編輯器,配置 CI 構建定義與 CD 發布定義,建立一個從版本控制觸發,歷經自動化測試與構件產出,最終無縫部署至目標環境的端到端自動化管道,具體展現 DevOps 快速迭代與穩定交付的核心價值。
Azure DevOps Pipelines:構建與部署自動化
Azure Pipelines 是 Azure DevOps 平台的核心組件之一,它提供了一個強大的框架來自動化程式碼的構建、測試和部署流程。本節將指導您如何利用 Azure Pipelines 建立一個完整的 CI/CD 管道。
Azure DevOps 組織與專案設置
在開始之前,您需要一個 Azure DevOps 組織。
註冊 Azure DevOps: 前往 Azure DevOps 網站,使用您的 Microsoft 或 GitHub 帳戶進行註冊。註冊過程中,您需要創建一個獨特的組織名稱(例如
BookLabs)和選擇一個 Azure 地區。創建專案: 在您的 Azure DevOps 組織內,創建一個新的專案。這個專案將用於管理您的程式碼、管道和其他 DevOps 工作負載。
版本控制:使用 Azure Repos 管理程式碼
Azure Repos 提供了一個基於 Git 的版本控制服務,是 Azure Pipelines 的理想程式碼來源。
- 導入現有程式碼: 如果您現有的程式碼託管在其他 Git 倉庫(如 GitHub),您可以輕鬆地將其導入到 Azure Repos 中。在 Azure Repos 的專案中,選擇「Import a Git repository」,然後提供來源倉庫的 URL。Azure Repos 將會複製該倉庫的內容到您的新倉庫中。
創建 CI 管道 (Classic Editor)
Azure Pipelines 支持兩種管道定義模式:經典編輯器(圖形化介面)和 YAML 檔案。為了便於初學者理解,我們將使用經典編輯器模式。
導向 Pipelines: 在 Azure DevOps 專案中,導航至「Pipelines」>「Builds」。點擊「New pipeline」按鈕。
選擇經典編輯器: 在管道創建頁面,選擇「Use the classic editor」選項。
選擇程式碼來源: 指定您的程式碼所在的倉庫。Azure Pipelines 支持多種 Git 系統,包括 Azure Repos Git、GitHub、Bitbucket 等。在此選擇包含您已導入程式碼的 Azure Repos Git。
選擇構建範本: Azure Pipelines 提供多種預配置的構建範本,可根據您的專案類型(如 .NET, Node.js, Maven 等)快速配置常見的構建步驟。您也可以選擇從空範本開始。
配置構建定義: 選定範本後,您將進入構建定義的配置頁面,主要包含以下幾個部分:
- Variables: 定義可在管道中使用的變數,例如構建配置 (
BuildConfiguration) 或平台 (BuildPlatform)。這些變數通常由系統預設,也可以自定義添加。 - Steps: 這是管道的核心,定義了執行的一系列任務。您可以添加各種任務,如編譯程式碼、運行單元測試、執行腳本、打包應用程式等。
- Triggers: 配置觸發管道運行的條件。例如,可以設置為在程式碼推送到特定分支時自動觸發。
- Options: 設置管道的額外選項,如超時時間、並行構建策略等。
- Variables: 定義可在管道中使用的變數,例如構建配置 (
視覺化 Azure Pipelines CI 管道創建流程
以下圖示展示了在 Azure Pipelines 中創建 CI 管道的關鍵步驟。
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 14
skinparam minClassWidth 100
start
:導航至 Pipelines > Builds;
:點擊 "New pipeline";
:選擇 "Use the classic editor";
:選擇來源儲存庫 (例如:Azure Repos Git);
:選擇建置範本 (或空白);
:配置建置定義;
partition "配置區段" {
:變數 (Variables);
:步驟 (Steps);
:觸發器 (Triggers);
:選項 (Options);
}
:儲存建置定義;
:CI 流程就緒;
stop
@enduml
看圖說話:
此圖示概述了在 Azure Pipelines 中創建 CI 管道的過程。首先,從導航到「Pipelines」>「Builds」開始,然後點擊「New pipeline」並選擇「Use the classic editor」。接下來,需要「Choose Source Repository」,指定程式碼的來源,例如 Azure Repos Git。
之後,系統會引導您「Select Build Template」,您可以選擇一個預設範本或從頭開始。隨後進入「Configure Build Definition」階段,這是核心部分,包含四個關鍵的配置區域:「Variables」(用於定義變數)、「Steps」(定義構建任務序列)、「Triggers」(設置自動觸發條件)和「Options」(配置額外行為)。完成所有配置後,最後一步是「Save the Build Definition」,這樣一個 CI 管道就創建完成了,準備好執行自動化的構建和測試流程。
Azure Pipelines 任務配置與代理程式選擇
在 Azure Pipelines 中,構建定義的「Tasks」標籤頁是配置 CI 管道執行邏輯的核心。這裡定義了在構建過程中需要執行的所有具體操作。
任務配置與代理程式池
任務列表: 「Tasks」標籤頁展示了一個按順序排列的任務列表。每個任務代表一個獨立的操作,例如編譯程式碼、運行測試、打包應用程式等。您可以通過點擊「+ Add task」按鈕,從 Azure Pipelines 龐大的任務目錄中選擇並添加所需的任務。這個目錄包含了官方提供的任務,以及來自 Azure Marketplace 的第三方任務,甚至可以自定義開發專屬任務。
代理程式 (Agent): 管道的執行依賴於代理程式。Azure DevOps 提供免費的「hosted agents」,這些代理程式運行於 Microsoft 管理的基礎設施上,支援多種作業系統。此外,您也可以選擇部署和管理自己的「self-hosted agents」,以滿足特定的安全或性能需求。在「Pipeline」部分,您可以配置使用哪個代理程式池來執行您的構建任務。
構建階段與任務詳情
一個典型的 CI 管道會包含一系列任務,這些任務按順序執行:
- Get sources: 此階段配置從版本控制系統(如 Azure Repos Git)獲取程式碼的設定。雖然在創建管道時已進行初步配置,但仍可在這裡進行修改。
- Agent job: 這是執行實際任務的環境。您可以在此階段添加一系列按順序執行的任務。
- 任務選擇: 通過「+ Add task」從目錄中選擇任務。
- 任務配置: 每個任務都有其右側的配置面板,用於設定具體參數。
- 任務範例: 一個 CI 管道可能包含以下類型的任務(具體任務列表會根據專案類型而異):
- 編譯: 例如,使用 .NET CLI 執行
dotnet build。 - 測試: 運行單元測試,例如
dotnet test。 - 打包: 將應用程式打包成可部署的格式。
- 發布構建構件: 將構建產生的文件(artifacts)發布到 Azure Pipelines,以便後續的 CD 階段使用。
- 編譯: 例如,使用 .NET CLI 執行
啟用持續整合觸發器
為了讓 CI 管道在程式碼變更時自動運行,需要在「Triggers」標籤頁中啟用 CI。
- 配置 CI 觸發器: 啟用「Continuous Integration」選項,並配置觸發條件,例如在推送到特定分支時自動啟動構建。
執行與驗證管道
完成所有配置後,可以保存並手動觸發一次管道運行來進行測試。
- 保存與排隊: 點擊「Save & queue」按鈕來保存配置並啟動一次構建。
- 查看執行結果: 管道運行完成後,您可以查看詳細的執行日誌,包括每個任務的輸出、單元測試的結果報告,以及發布的構建構件。這些資訊有助於診斷問題和評估構建的成功與否。
創建 CD 管道(發布定義)
在 CI 管道成功構建並發布構件後,接下來需要配置 CD 管道來自動化部署。在 Azure Pipelines 中,這個過程被稱為「Release」。
創建新發布定義: 導航至「Pipelines」>「Releases」菜單,然後點擊「New pipeline」。
選擇發布範本: Azure Pipelines 提供多種預設的發布範本,例如用於部署到 Azure App Service 的範本。選擇適合您部署目標的範本。
配置階段 (Stage): 一個發布管道可以包含多個階段,每個階段代表一個部署環境(如開發、測試、生產)。為第一個階段命名,例如「CI Environment」。
配置構建構件 (Artifact): 在「Artifacts」部分,配置發布管道將使用的構建構件。這通常是 CI 管道產生的應用程式套件。您可以指定構建管道的來源和版本。
配置自動化觸發器: 設置發布觸發器,以便在 CI 構建成功完成後自動觸發部署。
配置階段任務: 類似於 CI 構建,每個發布階段也需要配置一系列任務來執行實際的部署操作。這包括選擇代理程式、配置部署到目標環境的具體步驟(例如,將應用程式部署到 Azure App Service)。
視覺化發布階段配置
以下圖示簡化了創建 Azure Pipelines 發布定義的過程。
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 14
skinparam minClassWidth 100
start
:導航至 Pipelines > Releases;
:點擊 "New pipeline";
:選擇部署範本 (例如:Azure App Service);
:命名階段 (例如:CI Environment);
:新增發行成品 (連結至建置管道);
:配置自動發行觸發器 (建置成功時);
:配置階段的部署任務;
:選擇代理集區;
:定義部署步驟;
:儲存發行定義;
stop
@enduml
看圖說話:
此圖示展示了在 Azure Pipelines 中創建 CD 發布定義的流程。首先,從導航到「Pipelines」>「Releases」,然後點擊「New pipeline」,並選擇一個合適的「Deployment Template」(例如 Azure App Service 部署)。接著,需要為發布的「Stage」命名,這代表一個部署環境。
「Artifacts」部分用於關聯 CI 管道產生的構建構件,這是部署的基礎。然後,配置「Triggers」,通常設置為在 CI 構建成功後自動觸發發布。最後,在「Stage Tasks」中,配置具體的部署步驟,包括選擇代理程式和定義部署到目標環境的操作。完成所有配置後,點擊「Save the Release Definition」來完成 CD 管道的設置。這個流程將 CI 的輸出自動化地推向生產或測試環境。
縱觀現代軟體開發的複雜生態,交付速度與品質穩定已成為衡量團隊績效與市場競爭力的核心指標。Azure Pipelines 正是實現此目標的關鍵基礎設施,它提供了一套從程式碼到部署的完整自動化框架。
深入剖析此工具的實踐價值可以發現,其核心優勢不僅在於透過圖形化介面(如經典編輯器)降低了 DevOps 的入門門檻,更在於它將抽象的工程紀律具象化為可執行的任務序列。然而,真正的挑戰並非工具操作本身,而是團隊能否建立起與之匹配的持續整合文化,包括嚴謹的版本控制、全面的自動化測試,以及跨職能的協作默契。這往往是從手動部署轉向自動化流程中最關鍵的瓶頸。
展望未來,從經典編輯器走向 YAML 程式碼定義的管道(Pipeline as Code)已是不可逆的趨勢,這將賦予團隊更高的可追溯性與版本管理能力。同時,將安全性(DevSecOps)與品質閘門更深度地整合進 CI/CD 流程,將是下一階段的發展重點。
玄貓認為,導入 Azure Pipelines 這類 CI/CD 工具,其真正價值不僅在於技術效率的提升,更在於它強制團隊建立起標準化、可追溯且持續反饋的工程文化。對於追求卓越工程效能的管理者而言,應將其視為打造高績效團隊的策略性投資,優先投入資源以建立穩固的自動化基礎。