標籤:百度百科 軟體開發 流水線 產品 工業
CI-持續整合(1)-軟體工業“流水線”概述1 概述
持續整合(Continuous integration)是一種軟體開發實踐,即團隊開發成員經常整合它們的工作,通過每個成員每天至少整合一次,也就意味著每天可能會發生多次整合。每次整合都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而儘早地發現整合錯誤 [1]。
持續整合 相當於將傳統工業的 流水線 作業的思想應用到現代的 軟體工業 中來。不同之處在於,工業流水線 最終出來的是一個一個的產品複製體,但是 軟體流水線 最終出來的是一代一代更新迭代的版本,但是共同點在於:整體產出的效率將極大地增加。
首先說CI解決了的問題:
小步伐的產品迭代
高頻率的版本發布
隨時隨地的系統整合
穩定的系統演化線路圖
這些都是 現代敏捷軟體工程 理論中所要求達到的目標。
2 開發模式變遷
傳統開發協作模式的各種角色:
從事軟體產品的功能開發
編寫單元測試指令碼
簡單的開發階段的功能驗證
開發人員
編寫測試案例
整合階段全面的功能驗證
使用開發人員的交付物搭建測試環境
進行功能測試
一些自動化測試
測試人員
維護髮布的相關配置
將通過測試的軟體交付物按照流程發布到伺服器上
發布人員
監控並保持伺服器上的服務 7*24h 正常運行
營運人員
而且在傳統的過程中,存在如下特點:
除了開發人員外,其它角色基本上是 全手工 或者 大部分手工,交易處理效率低
開發和交流基本靠 口口相傳 或者 郵件/QQ,溝通成本大
大部分從業人員總是做重複枯燥的工作,沒有技術成長性
實踐活動缺乏積累性,每次都是從頭開始的相同的人工重複
而 持續整合 的工程思想引進之後,會發生如下變化:
設計自動化測試案例
編寫自動化測試相關代碼
測試人員
設定自動化發布方案
編寫自動化發布相關代碼
發布人員
設定自動化營運方案
編寫自動化營運相關代碼
營運人員
也就是說,所有的角色都要先是一個 開發人員 然後才是一個 XX領域人員。這種模式在目前IT智力密集的互連網行業特別明顯,在一些主要的線上招聘平台裡面可以看到大的互連網公司的招聘資訊基本都是:
然後給的薪水待遇都是開發人員的待遇,甚至目前很多公司的崗位編製都是屬於開發人員之列了。
在互連網行業裡面,軟體開發模式已經從 傳統軟體工程 向 敏捷軟體工程 變遷,實現此思想的相應的方法也變遷,那麼相應的從業人員的技能要求也要變遷。
換句話來說:IT行業的領域崗位,必須要掌握開發技能,如果不做出一些改變和提升,那麼接下來的現象就是開發人員全線開始佔領IT領域類的崗位了。
3 持續整合實踐
持續整合的典型的工具就是開源系統 Jenkins。通過對 Jenkins 工具的應用的研究,繪製了一個全流水線的軟體開發圖,如下:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/111649/201512/111649-20151228202150417-682257350.png" style="margin:0px;padding:0px;border:0px;" />
前期 CI 環境準備:
功能開發人員開發好產品特性代碼
發布人員開發好自動化構建和發布代碼
測試人員開發好自動化測試代碼
使用 Jenkins 工具將這些工具鏈都組合起來將流水線調試成功,所有環境搭建好
以上相當於是CI體系的建立階段,是會有一定的技術力量投入,但是後面的反覆迭代過程,則是來收回這些成本的。
後期迭代工作流程:
開發人員向git伺服器指定分支提交了新的代碼
git伺服器的 webhook 接收到提交事件後向 Jenkins 伺服器指定介面發起請求,執行構建指令碼
從git伺服器上面同步代碼
執行自動構建指令碼,產生交付物
自動搭建測試環境
Jenkins 執行自動化測試指令碼Jenkins 向 自動化發布 系統發起請求自動化發布系統 進行自動灰階發布觸發 自動化測試系統逐步全網發布
基本上,如上步驟可以全自動化無人值守完成。整個過程高效且不容易出錯,對比手工式的生產模式,持續整合手段將極大地減少每次迭代的周期,保證整體項目可以按照極小的步伐和極高的頻率進行穩步演化。
4 階段小結
此文作為 持續整合 系列文章的開端,還有一些偏重於理論部分,以讓大家對整體架構有所瞭解,同時也建立起現代的軟體工程的整體觀念。
後續的部分將側重於環境搭建及相應的環境代碼的開發的介紹,最後能夠形成一套完整的能夠提供生產力的 持續整合 系統。
CI-持續整合(1)-軟體工業“流水線”概述