天天看點

基于容器服務的持續內建與雲端傳遞(五)- 探究持續傳遞系統的本質

在《基于容器服務的持續內建與雲端傳遞》系列中,我們已經讨論了持續內建與持續傳遞給軟體開發帶來的變革,介紹了如何從零搭建一個持續傳遞系統以及在阿裡雲上面如何實作持續傳遞。

不過,在這篇文章中,我們會用一個不一樣的角度來思考持續傳遞,到底持續傳遞給我們帶來了什麼,在容器的持續傳遞的場景中還缺少什麼。回到本系列第一篇文章中的容器持續傳遞的流程圖:

基于容器服務的持續內建與雲端傳遞(五)- 探究持續傳遞系統的本質

這張圖中描述了一個基于容器的持續傳遞的流程,它定義了幾個階段,本地開發階段、持續內建階段、持續傳遞階段等等,規定了在每個階段中該做什麼事情,開發人員、運維人員應該應該承擔什麼樣的任務與責任。

從某種意義上來講,持續傳遞不隻隻是一個技術問題,更多的是探究自動化軟體标準化的傳遞流程的問題,通過技術的手段将軟體開發、測試、內建、傳遞過程中的每個步驟進行标準化,然後再用一個靈活的流水線将不同的步驟串起來。

軟體傳遞和汽車制造的原理是相似的,最早的汽車是純手工打造的,産量低可靠性差。随着科技的發展,一輛汽車的零件可以由全球各地的公司制造,然後在一個可程式設計的流水線上快速的組裝出來,現在組裝一輛汽車隻需要幾分鐘的時間,而這都得益于子產品的标準化和可擴充的流水線。同樣持續內建效果的好壞取決于标準化的程度與流水線的擴充能力:标準化程度越高、流水線擴充性越好持續傳遞的能力就越強。下面我們來讨論如何實作或者選擇持續傳遞中的“标準化”與“流水線”

對于大多數的企業而言,通常情況下不會投入大量的精力來開發屬于自己的持續傳遞系統,一般會選擇開源的持續傳遞方案或者使用提供持續傳遞能力的saas服務,例如基于jenkins的持續傳遞方案或者阿裡雲的crp持續傳遞平台系統等等。

在docker還沒有興起的時代,持續內建的方式通常是通過自動化配管工具來實作标準化的,比如ansible的playbook、chef的cookbook等等,但是這些自動化配管工具更傾向于配置的管理與環境的初始化,換言之,自動化配管工具并不是面向傳遞的标準化而是更傾向于配置管理流程的标準化。

而docker的興起,給我們帶來了傳遞流程标準化的可能性。當所有傳遞流程都變得标準化後,流水線(pipeline)則可以将不同的傳遞流程穿起來,實作持續傳遞的流程。

持續傳遞要符合自己的業務場景與形态,我們經常可以在社群中看到不同的持續內建的方案,但是,最開始要做是根據自己的業務形态來執行流程與标準。有了業務場景再去選擇合适自己的持續內建方案。比如阿裡雲容器服務提供基于hub的簡單的持續內建方案,提供基于jenkins的開源的持續內建方案也提供基于crp的持續內建的方案。他們分别面向不同的場景、解決了不同的問題。先明确自己持續傳遞的場景與所需要的能力然後再選擇不同的持續內建的方案。

docker已經幫我們解決了大部分傳遞流程中的标準化問題,那麼選擇一條适合的流水線則尤為重要,saas類的雲服務通常情況會提供标準的流水線(pipeline)實作,但是相比而言,基于dsl的jenkins的流水線(pipeline)是更為強大的選擇。針對于不同的業務,開源的jenkins流水線靈活的程度大于saas類的持續傳遞系統的流水線大于固定流程的流水線。

在使用持續內建的過程中,我們會根據業務的形态的變化,不斷的在流水線上添加或者删減持續傳遞的流程。當持續傳遞的流程被大家認可并遵守的時候,持續傳遞的能力就會真正的展現出來。通過類似子產品化的插拔将不同的元件不同的流程融合在一起,不斷的演進,滿足不同次元的業務場景與方向。

還有什麼是我們沒有讨論的?其實docker給我們帶來的不隻隻是标準化的部分,還有更多的是職責劃分的思考,從前從軟體的開發到測試之前的部分是開發負責的,而從測試、上線、後期的線上運維都是運維的人員負責的。

不過,軟體架構的變革例如微服務的興起等等會導緻運維變得越來困難,從前一個企業隻有少量的“巨石”軟體系統,運維人員隻需要運維少量單一的技術架構的系統即可。但是,現在一個微服務系統可能有幾十個子產品,每個子產品的運作時環境、運維方式都不盡相同,這給運維帶來的難度是指數級增長的。

現在越來越多的人在讨論devops或者sre,其實這并不是一個新的職業,更多的是對于開發與運維邊界的重新定義。

個人覺得開發人員未來會更傾向于devops的方向發展,即開發人員中會有更細分的傾向,部分開發人員傾向于線上維護與元件調優而另一部分則側重軟體開發。

而運維人員會更傾向于平台化或者sre化,運維人員會花費跟多的精力在自動化持續傳遞平台流程的建設與優化、基礎設施的建設(監控、日志、擴容)等等。

持續內建與持續傳遞不僅是提速了傳遞的流程,更多的是優化了開發人員的職責劃分與傳遞的方式。

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