在現代軟體開發生命週期中,持續整合與持續部署(CI/CD)已是提升交付效率的關鍵實踐。傳統圖形化介面雖直觀,但在複雜的多環境部署與大規模協作下,其可維護性逐漸成為挑戰。為此,將管道定義以程式碼形式管理的「基礎設施即程式碼」(Infrastructure as Code, IaC)理念應運而生。透過 YAML 等宣告式語法,團隊能將 CI/CD 流程與應用程式碼一同納入版本控制,不僅提升部署的透明度與可追溯性,更實現了跨專案的標準化與自動化配置。本文將從 Azure Pipelines 的實踐出發,解析從傳統部署任務到 YAML 自動化管道的演進路徑,探討其在提升開發效率與維運穩定性方面的理論價值。
Azure Pipelines 發布流程:多階段部署與 YAML 自動化
在成功建立 CI 管道後,我們將進一步配置 CD 管道,實現應用程式自動化部署到多個環境。
配置發布階段與部署任務
配置部署任務: 在發布定義的階段配置中,您會找到預設的部署任務,例如「Azure App Service deploy」。您需要填寫與您的 Azure 環境相關的參數:
- Azure subscription: 選擇您用於部署的 Azure 訂閱。
- App Service name: 指定目標 Azure Web App 的名稱。請確保該 Web App 已預先創建。若未創建,可使用 Azure CLI 或 PowerShell 命令來創建。
- Package or folder: 指定要部署的應用程式套件(通常是 CI 管道輸出的 ZIP 文件)。
命名與保存發布: 為您的發布定義命名(例如,一個描述性的名稱,如「Deploy to QA and Prod」),然後保存配置。
複製與配置其他環境: 為了快速設置多個環境(如 QA 和 PROD),您可以複製現有階段的配置,然後修改特定於新環境的參數,例如目標 App Service 的名稱。
觸發部署: 創建新的發布(Release)來啟動部署流程。您可以手動創建,也可以配置為在 CI 構建成功後自動觸發。
監控部署狀態: 發布執行後,您可以查看每個階段的部署狀態,確認應用程式是否成功部署到各個環境。
YAML 管道:以程式碼定義 CI/CD
雖然經典編輯器提供了直觀的圖形化界面,但對於大規模項目或需要自動化管道創建的場景,使用 YAML 文件來定義 CI/CD 管道更為靈活和高效。YAML 管道將管道的定義與程式碼一同儲存在倉庫中,實現了「Infrastructure as Code」的理念。
創建
azure-pipelines.yaml文件: 在您的程式碼倉庫根目錄下,創建一個名為azure-pipelines.yaml的文件。定義 CI 步驟: 在 YAML 文件中,您可以聲明觸發條件、代理程式池以及一系列構建和測試步驟。
trigger: 定義觸發管道運行的分支(例如,master)。pool: 指定構建任務將在哪種類型的代理程式上運行(例如,vmImage: ubuntu-latest)。steps: 包含一系列要執行的任務,每個任務都有其名稱和具體操作。
視覺化 YAML 管道結構
以下圖示展示了一個基本的 YAML 管道結構。
@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
:定義觸發分支 (例如:master);
:指定 VM 映像 (例如:ubuntu-latest);
:步驟 1:檢出程式碼;
:步驟 2:建置應用程式;
:步驟 3:執行測試;
:步驟 4:發布成品;
stop
@enduml看圖說話:
此圖示描繪了 Azure Pipelines YAML 文件的結構和 CI 任務的執行順序。頂部的「Trigger」部分定義了觸發管道的條件,例如監控 master 分支。接著,「Pool」部分指定了構建任務將在哪個代理環境中運行,例如 ubuntu-latest。
核心是「Steps Sequence」,它展示了 CI 流程的四個主要任務按順序執行:首先是「Restore NuGet」以獲取依賴項,然後是「Build Project」進行編譯,接著是「Run Tests」執行單元測試,最後是「Collect Code Coverage」來分析測試覆蓋率。每個任務的執行都依賴於前一個任務的成功完成,共同構成了一個完整的持續整合流程。
Azure Pipelines YAML 管道的創建與執行
本節將引導您如何在 Azure Pipelines 中創建並執行一個基於 YAML 文件定義的 CI 管道。這種方法將管道配置與程式碼一同版本化,提供了更高的靈活性和自動化能力。
在 Azure Pipelines 中配置 YAML 管道
啟動新管道創建: 在 Azure DevOps 專案中,導航至「Pipelines」選單,然後點擊「Create pipeline」按鈕。
選擇程式碼來源: 指定您的 YAML 管道文件所在的程式碼倉庫。在此範例中,選擇「Azure Repos Git」,然後選取包含該文件的倉庫。
配置管道: 在管道配置頁面,選擇「Use an existing YAML file」選項。接著,指定該 YAML 文件在倉庫中的路徑。
運行管道: YAML 文件內容會顯示在畫面上。點擊「Run」按鈕來啟動管道的執行。
監控執行細節: 管道運行後,您可以查看其執行狀態。點擊「Job」可以深入查看每個任務的詳細執行日誌和結果。這有助於診斷任何潛在問題,並確認 CI 流程的順利進行。
GitLab CI 簡介
在掌握了 Jenkins 和 Azure Pipelines 的 CI/CD 實踐後,我們將轉向另一個日益流行的 DevOps 工具:GitLab CI。
GitLab CI 是 GitLab 平台內建的一項服務,它整合了程式碼管理、CI/CD 管道以及專案管理功能,提供了一個全面的 DevOps 解決方案。
GitLab 帳戶註冊與驗證
創建 GitLab 帳戶: 註冊 GitLab 帳戶是免費的。您可以選擇使用現有的第三方帳戶(如 Google、GitHub、Twitter、Bitbucket)進行註冊,或通過 GitLab 註冊頁面創建新帳戶。
登錄與主頁: 成功註冊並驗證後,您將登錄到 GitLab 主頁。這裡匯集了 GitLab 的各種功能入口,包括程式碼倉庫管理、管道配置等。
在 GitLab 中創建新專案
在 GitLab 中進行任何 CI/CD 操作的前提是擁有一個專案來託管您的程式碼。在完成帳戶驗證後,您可以著手創建新的專案。
視覺化 YAML 管道創建流程
以下圖示展示了在 Azure Pipelines 中配置和運行 YAML 管道的步驟。
@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 > Create pipeline;
:選擇來源儲存庫 (例如:Azure Repos Git);
:選擇包含 YAML 檔案的儲存庫;
:選擇 "Use an existing YAML file";
:指定 YAML 檔案路徑;
:點擊 "Run" 按鈕;
:查看管道執行詳情;
:檢視工作執行日誌;
:CI 流程運作中;
stop
@enduml看圖說話:
此圖示概述了在 Azure Pipelines 中創建和運行 YAML 管道的過程。首先,從「Pipelines」選單進入,點擊「Create pipeline」。接著,在「Select Code Source」階段,指定包含 YAML 文件的倉庫。隨後,在「Configure Pipeline」階段,選擇「Use an existing YAML file」並提供文件的路徑。
最後,在「Run & Monitor」階段,點擊「Run」按鈕啟動管道。執行後,您可以查看管道的整體狀態、詳細的「Job Execution」日誌,以確保 CI 流程的順利進行。這個流程將管道的定義與程式碼整合,實現了更高效的 CI/CD 管理。
縱觀現代軟體交付流程的演進,從圖形化介面走向以程式碼定義(YAML as Code)的轉變,不僅是技術工具的升級,更代表一種思維框架的突破。傳統UI配置雖直觀易上手,卻在版本控制、協作效率與大規模複製上存在天然瓶頸。YAML管道將CI/CD流程資產化,使其與應用程式碼一同接受版本管理、審查與追蹤,從根本上解決了配置漂移(Configuration Drift)與流程不透明的治理難題。
未來,這種「一切即程式碼」(Everything as Code)的理念將持續滲透至監控、安全與合規性配置,成為衡量研發團隊成熟度的關鍵指標。對於追求卓越工程效能的技術領導者而言,引導團隊跨越初期的學習曲線,全面擁抱這種可追溯、可自動化的管道管理哲學,是構建敏捷與韌性兼具的交付體系的必然路徑。