以下文章來源於JetBrains ,作者TeamCity
為組織選擇 CI/CD 工具時,有很多選項。在 G2 等第三方網站進行直接功能比較可以幫助您深入瞭解工具的核心功能。
不過,您可能仍然會難以瞭解工具是否能夠滿足特定要求、使用起來有多容易,或者它與您的行業法規有多符合。
在這篇博文中,我們將提供選擇合適 CI/CD 解決方案的通用準則,並深入探討 TeamCity 如何融入這一框架。我們希望這能幫助您在為組織選擇最佳工具時做出明智決定。
選擇符合需求和目標的CI/CD工具
不同團隊對 CI/CD 解決方案的需求可能存在很大差異,並且完美服務於一個團隊的工具可能並不適合另一個團隊。
我們建議,為團隊選擇 CI/CD 解決方案時要考慮以下八大主要因素。
開發工作流。解決方案應該能夠順利集成到開發工作流中,不需要編寫大量自定義腳本或插件。
管道配置。 工具應該為環境、安全檢查、審批等提供靈活設置,允許工件和依賴項在構建步驟之間正確流動。
反饋和分析。 CI/CD 解決方案應提供從錯誤消息到基礎架構性能等多個級別的全面反饋,確保快速解決問題和不間斷的交付流程。
可擴縮性和維護。從一種工具遷移到另一種工具可能需要數月的時間,因此從一開始就使用能夠滿足所有未來需求的解決方案非常重要。
安全。 防止惡意行為者竊取源代碼、侵入基礎架構或損害最終產品至關重要。
成本效益。在評估 CI/CD 解決方案時,不僅要考慮許可證或訂閲的價格,還要考慮運營和維護費用。
易用性和支持。每個開發者,即使沒有持續交付經驗,也應該能夠了解其項目的構建和部署,以及如何有效使用工具來更快交付更改。
託管模式。 根據公司的需求,您可以考慮使用雲或自託管解決方案。兩種選擇各有優勢,最終選擇完全取決於您的具體需求。
所有現代解決方案都提供核心功能,例如 Docker 支持、配置即代碼或拉取請求自動構建。對於較小的項目,這些解決方案之間的差異可能並不顯著。
不過,隨着團隊成長和工作流的複雜化,正確設置管道並確保其按預期運行將變得越來越困難。在此類情況下,不同 CI/CD 工具的體驗可能會大為不同。
您經常使用哪種(哪些)持續集成 (CI) 系統?
開發工作流
評估持續集成工具時,務必瞭解工具可以在多大程度上根據工作流自定義,以及團隊需要在多大程度上根據工具調整流程。考慮以下幾個方面:
▍更改工作流的多樣性
團隊可能需要能夠構建每個拉取請求,在有人提交到特定分支時運行管道,或者在特定用户更改特定目錄中的文件時觸發構建。
有時,您可能需要運行構建管道而不向倉庫提交更改,以確保不會提交損壞的代碼並避免對團隊成員的工作產生負面影響。
代碼可能分佈在不同類型的多個版本控制系統 (VCS) 中,也可能位於單倉庫中。Maven 軟件包或 Docker 容器等外部依賴項更新時,您可能需要重建和重新部署應用程序。
通過仔細評估 CI/CD 工具對特定更改工作流的支持,您可以確保工具適合團隊,並將您自己流程中的更改需求降至最低。
▍Docker 和非 Docker 工作流
雖然 Docker 可以提供方便高效的方式來構建多種類型的應用程序,但在某些情況下,必須在實際操作系統上運行。例如,如果應用程序依賴於與無法從 Docker 容器訪問的硬件組件的集成,則您可能需要基於操作系統的工作流。
同樣,如果您的軟件需要與操作系統交互,例如開發系統驅動程序或 Windows 服務時,基於 Docker 的工作流可能不足以滿足團隊需求。
為團隊選擇最佳 CI 工具時,應評估具體項目需求並考慮這兩種方式的優點和侷限性。
▍團隊成熟度
剛剛開始持續集成的團隊在調整工作流以適應特定解決方案方面可能更加靈活。因此,具有較少可配置選項的工具可以提供更簡單直觀的用户體驗。
相比之下,準確瞭解其需求的高技能團隊可能會發現全包式 DevOps 平台具有侷限性,因為這些解決方案可能無法提供需要的靈活性和自定義水平。
▍遷移的便捷性
選擇新的 CI/CD 工具時,遷移的便捷性應該是關鍵考量因素之一。在許多情況下,遷移到獨立解決方案可能比遷移到完整的 DevOps 平台更簡單。由此,用户可以分批遷移,您只需編寫更少的手動集成,並且可以最大限度地減少開發工作流所受的干擾。
▍組織方面
考慮組織的文化和政策至關重要,特別是在鼓勵團隊選擇自己的開發工具的情況下。
請注意,某些團隊成員,特別對當前工具感到舒適和熟悉的團隊成員,可能會反對更改工作流。
▍TeamCity 中的開發工作流支持
TeamCity 非常適合以下工作流:
- 多 VCS 支持。
- 在不提交的情況下運行 CI/CD 流程。
- 精細控制更改(按分支、用户名、文件掩碼等篩選)。
- 觸發定義的參數。
- 與其他工具集成的全面 API。
在平台的簡化體驗和獨立工具的靈活性之間可能不易選擇,但好消息是,兩者不一定互為阻礙。
由於團隊經常同時使用多個 CI/CD 工具,您也可以結合使用獨立解決方案和全包式 DevOps 平台,只要兩者之間具有適當集成即可。
管道配置
每個團隊都有自己獨特的工作流和需求,因此使用完全滿足您需求的可自定義解決方案至關重要。以下是您在選擇 CI/CD 工具時可能會考慮的不同類型的管道配置。
▍基於 UI 和代碼的配置某些工具提供基於 UI 的配置方式,可以輕鬆上手和維護設置,因為管道無需任何特殊知識即可配置。所有現代工具都支持配置即代碼,提供版本化的配置歷史。許多工具使用 YAML 配置,提供了非常直觀的方式來自動執行簡單應用的構建和測試。不過,隨着團隊和基礎架構變得更加複雜,管理 YAML 文件可能會越發困難。對於大型項目,使用允許循環、條件語句和其他語言結構的成熟編程語言配置 CI/CD 可能更為有效。此外,它還使在 IDE 中編寫配置代碼以及利用其重構和調試功能更為輕鬆。
▍工作流自定義自定義是選擇持續集成和持續交付軟件的關鍵方面,因為它允許團隊創建與其特定構建和部署工作流相匹配的管道。根據觸發事件,例如代碼提交、依賴項更新或定時觸發器,團隊可能需要自定義構建環境、測試範圍、Docker 鏡像標籤和其他管道組件。如需在同一構建代理上按順序執行特定步驟(例如,您可能想要啓動 Windows 服務,然後在同一系統上運行構建),則所選工具應當能夠完全根據需要進行設置。
▍環境配置選擇 CI/CD 工具時,必須考慮其在環境配置方面提供的自定義水平。具體來説,團隊應該能夠選擇最符合其要求的構建環境,無論是使用 Docker 容器、雲構建代理、裸機服務器還是混合選項。
▍管道優化如“可擴縮性”部分所述,可以通過多種優化技術幫助團隊更快完成構建並縮短反饋循環。一項關鍵優化技術是能夠緩存依賴項,這可以避免每次運行構建時都下載和安裝依賴項,有助於儘可能縮短構建時間。此外,構建工件重用可以進一步減少構建時間,因為先前構建的組件可以在後續構建中重用。跨多個構建代理並行化測試是在大型項目中優化管道的另一種有效方式。將測試分散到多個構建代理中,團隊可以減少運行所有測試所需的時間,有助於縮短反饋循環並確保更快識別和解決問題。
並行測試徹底改變了我們開發和測試 TeamCity 的方式。我們自己的集成測試速度提高了超過 10 倍,用時從 4 小時縮短到大約 20 分鐘。
▍工件管理生成和傳播工件對於任何 CI/CD 管道都至關重要。工件允許構建“通信”並將數據從一個構建傳遞到另一個構建。通過選擇可以存儲工件的工具,您可以存儲構建生成的數據以供進一步分析和調試。
反饋和分析
CI/CD 的主要目的是縮短接收軟件更改反饋所需的時間。最實用反饋直接與特定代碼更改相關,並提供有關構建和部署狀態以及性能和質量指標更改的信息。
評估 CI/CD 解決方案時,必須考慮以下方面:
▍構建結果分析
CI/CD 解決方案應提供構建結果的詳細分析,包括有關失敗測試、構建時間、錯誤日誌和其他關鍵指標的信息。這些信息應該易於訪問,並可以讓開發者快速識別和解決問題。
▍趨勢
工具需要提供趨勢分析功能,使團隊能夠跟蹤構建和部署性能隨時間的變化。這可以幫助團隊識別模式和趨勢,並在潛在問題嚴重化之前主動將其解決。
▍性能監視
為了識別瓶頸和解決影響 CI/CD 流程效率的問題,需要分析構建代理的性能並確定為構建基礎架構提供更多資源的需求。
TeamCity 中的性能監視
▍VCS 和問題跟蹤器集成
通過集成版本控制系統和問題跟蹤器,CI/CD 工具開闢了更多提供反饋的途徑。
▍不穩定測試檢測
對於持續集成工具,能夠分析和檢測不穩定測試非常重要。為了縮短反饋循環和加快開發流程,需要可以識別不穩定測試並在測試結果中將其高亮顯示的工具。
可擴縮性和維護
軟件項目的規模和複雜性往往會逐漸增加。可靠的 CI/CD 系統必須能夠應對這種增長,並與管道、構建、用户、角色和工作流數量的增長保持同步。
要確保團隊永遠不會受到阻礙,系統應該能夠有效管理資源並配備監控和維護工具,快速解決問題。
以下因素將幫助您瞭解團隊所需的可擴縮性水平。
▍用户管理
在小型項目中,定義誰可以觸發構建、查看構建結果或修改管道配置的基本角色訪問規則通常就已足夠。大型團隊需要更高級的功能,例如 LDAP 集成或單點登錄 (SSO) 支持、雙重身份驗證、項目層次結構、精細權限管理、審批工作流和審核。
▍管道優化
着提交頻率和工作流複雜性的增加,有效利用 CI/CD 資源也將越發重要。這可以通過重用構建工件、最大程度減少多餘重建數量、重新排列構建隊列、並行化測試以及其他類似功能來完成。
▍項目模板
組織規模越大,項目模板的優勢就越明顯。通過標準化典型工作流,您可以顯著減少創建和維護管道所需的工作量、改善團隊之間的協作、防止錯誤配置並提高 CI/CD 管道的安全性。
▍性能和容錯
隨着項目數量和計算資源需求的增長,擴展構建基礎架構和降低潛在停機風險也更具挑戰性。
大型公司的典型需求包括自動配置構建代理(例如通過與雲平台集成)以及在池中組織構建代理以方便管理的功能。
企業級解決方案非常注重高可用性功能,例如在集羣環境中運行多個應用程序服務器以及智能負載均衡。
▍維護和升級
要識別和解決 CI/CD 設置中的問題,管理員應該擁有監控和日誌記錄工具,並且能夠根據需要增加資源、實現緩存機制或更新工件保留政策。
解決方案升級需要特別注意。部分工具非常依賴外部插件,以至於難以甚至無法在不破壞現有功能的情況下升級。
對於複雜性有限的小型團隊和項目來説,可擴縮的 CI/CD 解決方案可能並不重要。然而,隨着團隊規模和項目複雜性的增加,這將成為軟件開發流程中最關鍵的方面之一。
▍TeamCity 如何支持可擴縮性
TeamCity 可以支持任何規模的項目,包括具有大量依賴項的項目。它可以在高負載期間自動擴縮。TeamCity Server 的一個實例可以與超過 1,000 個構建代理穩定配合。
安全功能
安全性是所有軟件開發流程的主要考慮因素,對於 CI/CD 尤其重要,因為 CI/CD 工具擁有對敏感數據和系統的受信訪問。
評估解決方案時,應從兩個主要角度分析安全功能:
- 服務的安全性。 由於每天都會出現新的威脅和漏洞,解決方案必須確保潛在攻擊者無法訪問您的源代碼、秘密密鑰、構建基礎架構或構建結果。
- 最終產品的安全性。許多 CI/CD 工具可將安全檢查集成到構建管道,確保生成的軟件不存在可被利用的漏洞。
部分團隊傾向於優先考慮速度和效率而不是安全性,忽視安全性最佳做法。集成式平台通常會提供更簡單的方式來保護 CI/CD,代價是將您“供應商鎖定”到其生態系統和工作流。
▍成本效益
隨着管道越發複雜,團隊規模不斷擴大,與其他可能影響 CI/CD 系統有效性的因素相比,許可證或訂閲的價格可能變得不那麼重要:
- 據統計,通過重新排列構建隊列和儘可能減少冗餘構建,團隊可以節省至少 30% 的構建時間和相關成本。
- CI/CD 開箱即支持的工具和服務越多,編寫和維護自定義腳本和外部集成的機率就越低。這會極大地影響維護成本。
- 此外,大多數團隊都有高峯期(通常在發佈期間),在此期間持續集成工具的任何故障都會嚴重影響公司業務。如果沒有特定 CI/CD 解決方案的實際經驗,這是很難評估的挑戰之一。但是,通過閲讀其他團隊關於類似任務的評價和反饋,仍有可能瞭解它如何處理此類問題。
最終,CI/CD 解決方案的總擁有成本取決於團隊的具體需求。一般來説,應謹慎考慮以下因素:
▍集成成本
將 CI/CD 與版本控制系統、問題跟蹤器、構建和測試框架、部署自動化系統以及其他工具集成可能非常耗時和昂貴。
▍維護成本
每個 CI/CD 解決方案都需要分配資源來運行定期安全審核、更新底層基礎架構,以及診斷和消除瓶頸。在許多公司中,支持這些流程需要整個團隊。
▍CI/CD 效率
如果構建始終處於隊列中並且無法獲得快速反饋,這就違背了 CI/CD 解決方案的初衷。雲端動態擴縮、構建的重用和測試並行化等功能會顯著影響大公司的開發者效率。
▍反饋
要實現高效的軟件開發,及時且實用的反饋循環必不可少。構建失敗時,開發者應該快速找出問題的根本原因以及解決問題的明確路徑。通常,從收到構建失敗通知到完全理解需要修正的內容之間存在一段明顯的時間,這就是可靠的工具可以提供巨大價值的地方。
通過分析構建日誌並提供有關問題的精確信息,最好的 CI/CD 工具可以幫助開發者快速有效地解決問題,加快反饋循環並提高整體工作效率。
降低 TeamCity 擁有成本的因素:
- 許可成本
- 基礎架構成本
- 集成成本
- 維護成本
易用性和支持
對於 CI/CD 解決方案供應商來説,在功能和用户體驗之間找到最佳平衡是一大持續挑戰。為團隊評估軟件易用性時,應該考慮以下因素:
▍UI 一致性
隨着項目規模的增大,CI/CD 在不增加多餘複雜性的情況下提供必要功能變得越來越重要。評估解決方案時,要確保最關鍵的功能由供應商提供,而不是由社區開發。
“某一個競品的 UI 十分不友好。用户在 CI/CD 系統中應該是感到堅實可靠的,不管你做什麼它都不會出問題。我認為 TeamCity 的 UI 非常出色。當你使用它的時候,你會確信這是個運作良好的系統。”
– Steve Fortier,Gearbox 首席發佈工程師
外部插件通常會導致導航問題、界面響應不佳、術語和圖標衝突、屏幕尺寸和設備不匹配,以及缺少合適的文檔。無論團隊經驗如何,不一致的用户界面都會導致生產力下降。
▍無障礙功能
如果 CI/CD 系統支持無障礙功能,例如屏幕閲讀器兼容、鍵盤導航和高對比度模式,通常可以表明其總體體驗良好。
▍文檔和支持
全面的文檔、教程、視頻和熱心的社區對於有效使用 CI/CD 工具至關重要。根據經驗,解決方案在市場上推出的時間越長,您能夠解決問題並獲得答案的機率就越高。
▍API
根據團隊的具體需求和待實現的工作流,您可能需要將 CI/CD 與外部工具集成。這種體驗可能會有很大差異,具體取決於 API 的成熟度、文檔的可用性和質量,以及軟件版本之間更改的速度。
直觀的用户界面在 CI/CD 解決方案中至關重要,因為它可以幫助開發者輕鬆快速地理解和使用解決方案,即使流程較為複雜。
託管模型
CI/CD 解決方案大致可以分為兩類:雲和本地部署。
雲選項減輕了團隊維護和擴縮 CI/CD 流程的負擔,並允許在雲中構建管道。
本地部署解決方案則能讓您在防火牆的安全保護下託管 CI/CD,遵循最嚴格的安全法規和要求。
總結
組織選擇 CI/CD 工具時需要考慮多重因素。在這篇博文中,我們提供了在研究最適合團隊或組織的選項時可能需要考慮的關鍵因素。
歡迎留言或分享問題。我們很樂意為您提供解答。
構建快樂!
本博文英文原作者:Olga Bedrina
關於 TeamCity
TeamCity 是一款強大的持續集成和部署服務器,面向以 DevOps 為中心的團隊提供開箱即用的測試智能、構建問題的實時報告以及無與倫比的可擴展性。安裝和部署 TeamCity,幾分鐘之內即可開始構建您的 DevOps 管道。TeamCity 提供本地部署和基於雲的版本。
進一步瞭解 TeamCity,歡迎諮詢
JetBrains中國授權合作伙伴-龍智
官網:www.shdsd.com
電話:400-666-7732
郵箱:marketing@shdsd.com