天天看點

基于容器服務的持續內建與雲端傳遞(三)- 從零搭建持續傳遞系統

在上一篇文章中讨論了容器服務提供的傳遞能力,在本文中我們将讨論如何從零搭建一個持續傳遞系統。

對于大多數公司而言,選擇一個合适自己的持續傳遞系統是尤為重要的一件事情,不同的公司、不同的業務使用的場景也各不相同,是以要根據自己的業務場景與發展方向來選擇合适的方案。根據不同的業務場景與傳遞方式,阿裡雲容器服務提供了三種不同的持續傳遞方案。

基于jenkins的持續傳遞方案

基于容器服務的持續內建與雲端傳遞(三)- 從零搭建持續傳遞系統

基于jenkins的持續內建和持續傳遞方案是所有方案中最靈活、能力最強的方式,但也是需要客戶自主運維的方案。對于現有提供持續傳遞的saas服務而言,很難既覆寫簡單性與可擴充性。而對于定制化需求明顯的開發者而言,開源的jenkins一直是持續傳遞系統的第一選擇。容器服務為了讓開發者可以更簡單的使用jenkins進行容器傳遞,我們提供了容器服務的jenkins部署插件,可以直接在建構任務中推送docker compose模闆到容器叢集;提供了java、c++、python、nodejs、golang等語言的jenkins slave,開發者可以直接使用這些slave快速實作一個分布式內建的持續傳遞系統。在slave中内置了簡單的容器內建流程,開發者可以通過配置的方式将一個完整的持續內建流程在slave中運作起來。

jenkins的方案是所有方案中,功能最強大的。之是以選擇jenkins作為容器服務支援的開源方案的原因在于:

jenkins在國内的開發者中認可度較高,很多創業公司的自建持續傳遞系統的選擇大部分都是jenkins,便于開發者可以在老的系統上直接進行容器化的持續傳遞。

jenkins的能力遠不止我們上文中提到的這些,良好的開源社群給jenkins帶來的反哺,讓jenkins可以通過插件的方式滿足很多系統無法滿足的場景,比如對于剛剛使用容器的客戶可能會傾向于使用jenkins的混合釋出的方式,即将應用傳遞到容器服務的同時也傳遞到遠端的虛機上,進行應用的灰階測試,逐漸的遷移。

jenkins擁有良好的擴充性,在開發jenkins插件的時候,可以發現jenkins内部實作機制幾乎可以通過插件的方式讓開發者擴充所需的任何一個位置,對于很多定制化場景而言,這會是選擇jenkins的決定性因素。

jenkins擁有持續傳遞系統中最重要的也是最棒的流水線(pipeline)系統,在jenkins2.0以上的版本中,内置了流水線(pipeline)的支援,這表示了未來jenkins在持續內建與持續傳遞領域的發展趨勢與能力。

基于crp的持續傳遞方案

基于容器服務的持續內建與雲端傳遞(三)- 從零搭建持續傳遞系統

crp是阿裡雲推出的一款提供持續內建與持續傳遞功能的saas服務。同常見的持續傳遞系統類似,crp也提供了一個可擴充的流水線。開發者可以将自己的持續內建與持續傳遞流程轉換為一條dag圖的流水線(pipeline)。比如在本文中提供了一個簡單的容器化的持續傳遞的流水線定義。分為五個階段:代碼檢出、內建測試、鏡像建構、推送鏡像、部署應用。每次送出代碼,代碼倉庫都會觸發crp進行持續內建,運作使用者預定義的流水線(pipeline),測試不通過則重新內建,測試通過則開始應用部署。

這種內建方式的覆寫了高品質和可擴充兩個方面,但是crp作為一個通用的持續傳遞平台,提供的可擴充性有限、而且測試的基礎環境種類有限。對于複雜的多技術棧的微服務系統而言,靈活度不足。但是對于系統技術棧統一、持續傳遞需求簡單的客戶而言,crp是一個值得推薦的方式。

基于hub的持續傳遞方案

基于容器服務的持續內建與雲端傳遞(三)- 從零搭建持續傳遞系統

基于hub的持續傳遞方案是最簡單的持續傳遞方案,開發者無需搭建任何服務,可以直接通過在鏡像倉庫與容器服務中配置觸發器的方式完成應用的自動更新。持續傳遞的本質是如何可擴充、高品質、快速的進行傳遞。高擴充就要求持續傳遞系統有良好的流水線(pipeline)的設計,高品質則要求開發者有覆寫充分的測試腳本以及持續傳遞系統可以标準化的組織這些腳本并運作,而快速則是這三個要素中最簡單的,而基于hub的方案對于很多場景來講功能上是有缺欠的,但是在速度上是有優勢的。使用者送出代碼後會自動觸發容器hub的鏡像自動建構,建構完畢後會觸發容器服務的自動重新部署實作應用的更新。

這種方案特别适合在測試環境中快速疊代聯調的應用場景,雖然在标準的持續內建中測試是必不可少的一環,但是在實際的開發聯調的過程中,全量的自動化測試也會給疊代速度帶來一些阻礙,是以如果追求快速疊代并且測試的需求不是很強烈的場中,可以考慮直接使用基于hub的持續內建方案,簡單、高效。

在上文中,我們介紹了三種不同的持續傳遞方案,開發者可以根據自己的需求選擇其中任意一種從零開始進行容器化的傳遞之路。但是無論哪種方案,都需要進行取舍,選擇最符合業務形态的持續傳遞系統才是最重要的。

莫源,阿裡雲進階研發工程師。在加入阿裡巴巴之前,先後在北京天方地圓科技有限公司、微軟亞洲研究院任職。現主要負責阿裡雲容器服務産品的底層服務發現系統、叢集管理系統的研發,從事容器的持續傳遞、持續內建的方案的設計與實作。在雲計算、分布式系統、圖像識别與虛拟現實方向有多年的開發經驗。

繼續閱讀