過去在微軟擔任現場工程師期間,到過許多公家機關、金融證卷與醫療資訊介紹 Azure DevOps,其中最受歡迎的莫過於 Azure Pipeline。理所當然,許多未接觸過持續整合與持續交付的組織對 Azure Pipeline 充滿幻想。有趣的是,依據個人經驗,多數政府機關建立持續整合與持續交付是基於資訊安全,而非要求頻繁交付;多數醫療機構通常建立部分自動化持續整合與交付而不自知,會質疑 Azure Pipeline 能帶來多大好處;而金融業對於持續整合與持續交付比較偏向原有書上理論。
一套軟體開發的實踐,不同產業不同解讀,那究竟什麼是 持續整合 (Continuous Integration) 和持續交付 (Continuous Delivery) 服務?
關於持續整合的描述,我們引用 Martian Fowler 的說明:
持續整合是一種軟體開發的實踐,讓團隊成員經常整合他們的工作,通常每個人至少每天進行一次到數次的整合。每次整合均透過自動化建置與測試進行驗證,以盡快檢測出整合錯誤。多數團隊發現此方法可以顯著減少整合問題,允許團隊更快速開發有凝聚力的軟體。
而 持續交付 是持續整合的延伸,雖然不適合所有人,但如果實作得宜,就像施展魔法一樣,可以省去很多麻煩事與心力。它非常依賴 Release Pipeline 內所有自動化的 elements 與 tasks。
無論哪一個行業,個人自始自終相信:軟體應始終處於隨時可以發佈至 Production 的狀態。
Azure Pipeline 是功能齊全的持續整合和持續交付服務,適用於多數熱門程式語言與專案類型,有助於確保使用者可以隨時使用一致的且高品質的程式碼。在開始詳細介紹 Azure Pipeline 必須先了解依些基本觀念,如果先前你已經看過 Continuous Integration 或 Continuous Delivery 相關書籍,你可能會覺得這些專有名詞 (Pipeline, Task, Agent... etc.) 有點熟悉。下列提供一些常用關鍵字說明:
依據功能設定來說,Pipeline 用於建構 CI,Release Pipeline 建構 CD。但不同情境的可能單獨使用 Pipeline 或 Release Pipeline
雖然使用者可以在 Pipeline 建立交付工作,在 Release Pipeline 進行整合工作,但多數情況下建議 Pipeline 用於建構 CI,Release Pipeline 建構 CD,除了團隊比較不會混淆,也較能發揮其完整的功能
Pipeline 的設定可以分成兩種:視覺化設計工具與 YAML定義檔。目前普遍推薦使用方式是 YAML,雖然沒有視覺化工具直覺,但好處是定義檔案可以透過版本管理進行管理,並須透過 Pull Request 和分支構建策略中的程式審查來驗證您的更改,除了流程較為嚴謹,當修改發生問題時,因為有版本控制,您可以更輕鬆識別問題。簡單的設定流程如下圖:
Azure Pipeline 內提供多種樣板 (Template) 與工作 (Task),適用於多平台 (Windows, Linux, MacOs)與支援多種程式語言,也提供多種單元測試框架,降低使用者自行撰寫/維護 Script 負擔。除此之外,Azure DevOps 提供市集讓使用者發佈或下載多種延伸套件,這也是為什麼到企業推薦平台會先推薦 Azure DevOps 與 GitHub 主因之一:強大且眾多的功能套件可以使用。
注意:市集雖然有許多企業/開發者提供自訂延伸工具可以使用,但盡可能選擇知名組織或評價良好的延伸工具,並在使用前檢視其原始碼,避免敏感資料洩漏事情發生
Release Pipelines 是 DevOps CI/CD 的基本元素,可幫助您的團隊以更快的速度和更低的風險持續向客戶交付軟體。您可以在多個階段完全自動化您的軟體的測試和交付,直至 Production,或者設置半自動化流程並獲得同意和依據需求進行部署。
什麼時間點你需要 Release Pipeline?
一個完整的 Release Pipeline 需要做下列的設定:
隨著 Pipeline/Release Pipeline 越來越成熟,您可以考慮下列事項讓管理與維護更加容易: