基於容器服務的持續整合與雲端交付(三)- 從零搭建持續傳遞系統

來源:互聯網
上載者:User

摘要: 前言在上一篇本文中討論了容器服務提供的交付能力,在本文中我們將討論如何從零搭建一個持續傳遞系統。對於大多數公司而言,選擇一個合適自己的持續傳遞系統是尤為重要的一件事情,不同的公司、不同的商務使用的場景也各不相同,因此要根據自己的商務場景與發展方向來選擇合適的方案。

前言

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

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

基於Jenkins的持續傳遞方案

8b41238f8709a0b13ae03bd71e324fc513f0f52e

基於Jenkins的持續整合和持續傳遞方案是所有方案中最靈活、能力最強的方式,但也是需要客戶自主運維的方案。對於現有提供持續傳遞的SaaS服務而言,很難既覆寫簡單性與可擴充性。而對於定制化需求明顯的開發人員而言,開源的Jenkins一直是持續傳遞系統的第一選擇。容器服務為了讓開發人員可以更簡單的使用Jenkins進行容器交付,我們提供了容器服務的Jenkins部署外掛程式,可以直接在構建任務中發送DockerCompose範本到容器集群;提供了Java、C++、Python、Nodejs、Golang等語言的JenkinsSlave,開發人員可以直接使用這些Slave快速實現一個分散式整合的持續傳遞系統。在Slave中內建了簡單的容器整合流程,開發人員可以通過設定的方式將一個完整的持續整合流程在Slave中執行起來。

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

  1. Jenkins在國內的開發人員中認可度較高,很多創業公司的自建持續傳遞系統的選擇大部分都是Jenkins,便於開發人員可以在老的系統上直接進行容器化的持續傳遞。
  2. Jenkins的能力遠不止我們上文中提到的這些,良好的開源社群給Jenkins帶來的反哺,讓Jenkins可以通過外掛程式的方式滿足很多系統無法滿足的場景,比如對於剛剛使用容器的客戶可能會傾向於使用Jenkins的多工發佈的方式,即將套用交付到容器服務的同時也交付到遠端虛機上,進行套用的灰階測試,逐步的遷移。
  3. Jenkins擁有良好的擴充性,在開發Jenkins外掛程式的時候,可以發現Jenkins內部實現機制幾乎可以通過外掛程式的方式讓開發人員擴充所需的任何一個置放,對於很多定制化場景而言,這會是選擇Jenkins的決定性因素。
  4. Jenkins擁有持續傳遞系統中最重要的也是最棒的流水線(pipeline)系統,在Jenkins2.0以上的組建中,內建了流水線(pipeline)的支援,這表示了未來Jenkins在持續整合與持續傳遞領域的發展趨勢與能力。

基於CRP的持續傳遞方案

9ccf2992208bac69ce722675a2744d85ffb5fc20

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

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

基於Hub的持續傳遞方案

bb9b278b8ab2d36ae81fa337d016312ac54498ae

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

這種方案特別適合在測試環境中快速反覆運算聯調的套用場景,雖然在標準的持續整合中測試是必不可少的一環,但是在實際的開發聯調的程序中,全量的自動化測試也會給反覆運算速度帶來一些阻礙,因此如果追求快速反覆運算並且測試的需求不是很強烈的場中,可以考慮直接使用基於Hub的持續整合方案,簡單、高效。

尾聲

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

簡歷

莫源,阿裡雲進階研發工程師。在上線阿裡巴巴之前,先後在北京天方地圓科技有限公司、微軟亞洲研究院任職。現主要負責阿裡雲容器服務供應項目的底層服務發現系統、集群管理系統的研發,從事容器的持續傳遞、持續整合的方案的設計與實現。在雲端運算、分散式系統、影像辨識與虛擬實境方向有多年的開發經驗。

相關產品:

  1. 容器服務(Docker)
  2. 雲效
  3. 伺服器安全(安騎士)
  4. 雲端服務器ECS
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.