身為在面對大量使用者的平台管理人員,代理程式集區配置與代理程式數量管理是很重要的。首先,因為代理程式需要資源 (Windows/Linux/Mac 伺服器),除了需要維運費用也需要管理成本。除此之外, Azure DevOps 有平行作業 (Parallel jobs) 數量限制,使用者需要付費才能取得更多平行作業數量,才得以同時執行多個 Pipeline Task。
什麼是平行作業:
Pipeline 可以視為一連串工作集合,當某個 Pipeline 執行時,您可以同時執行多個工作,每個執行中的工作都會占用在代理程式平行作業數量。 如果平行工作數量不敷組織使用,工作即會佇列等待,一個接一個地執行。平行作業設定僅適用於 Azure DevOps Services。
多數的組織不允許無限上綱提供資源,即使是 IT 資源充足的企業,過多資源而沒有妥善運用會造成浪費,但最恐怖的是仗勢資源充裕而規劃出非常沒有效率的 CI/CD 流程,反而造成軟體交付品質差勁或花更久的時間進行交付。本篇文章皆提供幾個簡易的建議,讓 Pipeline 規劃人員或平台管理人員有正確的代理程式管理觀念。
組織中較常見管理是對於 Build Pipeline 與 Release Pipeline 不同的代理程式集區。正常來說,團隊非常不希望影響到 Production 層級的部署,所以會設定專用的 Release 代理程式集區,即使其中 Agent 閒置時間可能比 Build 代理程式比例較高,但為了隨時可以交付且不需等待,非常多團隊是願意投資資源在 Release 代理程式。
通常在授課時,學員會誤會需要大量代理程式才能達到隨時交付目的。其實 Release Pipeline 設計上會將部署工作設定在 Release 代理程式上,非部署工作 (如:整合測試、壓力測試) 會設定於其他類型的代理程式上。而且部署工作執行時間通常比 Build 工作來的短很多,所以保留在 Release 代理程式集區的代理程式,通常會遠低於 Build 代理程式集區,而非在 Release 代理程式集區內有大量代理程式待命方式確保隨時交付。
Azure DevOps Service 功能設計上無法 保留特定數量平行作業給指定的代理程式集區,但可以設定代理程式集區使用平行作業數量上限。舉個簡單的例子,當組織有 50 個平行作業,設定其中 30 個 Build 代理程式集區、10 個給安全掃描程式集區,最後多的 10 個即會給 Release 代理程式集區。雖然需要計算,且在論壇上頗被人詬病,但有時候自己想想,這可能是比較妥善使用代理程式的設計。
除了多數測試功能需要地端資源,一般建置或單元測試可以考慮使用雲端資源。雲端資源所產生的代理程式伺服器與代理程式較為乾淨,當需求結束沒有請求即會收回清除,確保每次建置與測試不會因為伺服器過多的套件與設定產生而外的問題。除此之外,也可以降低伺服器管理者負擔 (如安裝安全更新、清理磁碟空間...等)。依據情境使用雲端與地端資源是較有彈性的管理方式。