CI-持續集成(1)-軟件工業“流水線”概述


CI-持續集成(1)-軟件工業“流水線”概述

1   概述

持續集成(Continuous integration)是一種軟件開發實踐,即團隊開發成員經常集成它們的工作,通過每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤 [1]

持續集成 相當於將傳統工業的 流水線 作業的思想應用到現代的 軟件工業 中來。不同之處在於,工業流水線 最終出來的是一個一個的產品復制體,但是 軟件流水線 最終出來的是一代一代更新迭代的版本,但是共同點在於:整體產出的效率將極大地增加。

首先說CI解決了的問題:

  • 小步伐的產品迭代
  • 高頻率的版本發布
  • 隨時隨地的系統集成
  • 穩定的系統演進線路圖

這些都是 現代敏捷軟件工程 理論中所要求達到的目標。

[1] 百度百科.持續集成.2015

2   開發模式變遷

傳統開發協作模式的各種角色:

  • 開發人員
    • 從事軟件產品的功能開發
    • 編寫單元測試腳本
    • 簡單的開發階段的功能驗證
  • 測試人員
    • 編寫測試用例
    • 集成階段全面的功能驗證
    • 使用開發人員的交付物搭建測試環境
    • 進行功能測試
    • 一些自動化測試
  • 發布人員
    • 維護發布的相關配置
    • 將通過測試的軟件交付物按照流程發布到服務器上
  • 運維人員
    • 監控並保持服務器上的服務 7*24h 正常運行

而且在傳統的過程中,存在如下特點:

  • 除了開發人員外,其它角色基本上是 全手工 或者 大部分手工,事務處理效率低
  • 開發和交流基本靠 口口相傳 或者 郵件/QQ,溝通成本大
  • 大部分從業人員總是做重復枯燥的工作,沒有技術成長性
  • 實踐活動缺乏積累性,每次都是從頭開始的相同的人工重復

而 持續集成 的工程思想引進之后,會發生如下變化:

  • 開發人員
    • 編寫開發相關代碼
  • 測試人員
    • 設計自動化測試用例
    • 編寫自動化測試相關代碼
  • 發布人員
    • 設置自動化發布方案
    • 編寫自動化發布相關代碼
  • 運維人員
    • 設置自動化運維方案
    • 編寫自動化運維相關代碼

也就是說,所有的角色都要先是一個 開發人員 然后才是一個 XX領域人員。這種模式在目前IT智力密集的互聯網行業特別明顯,在一些主要的在線招聘平台里面可以看到大的互聯網公司的招聘信息基本都是:

  • 測試開發工程師
  • 發布開發工程師
  • 運維開發工程師

然后給的薪水待遇都是開發人員的待遇,甚至目前很多公司的崗位編制都是屬於開發人員之列了。

在互聯網行業里面,軟件開發模式已經從 傳統軟件工程 向 敏捷軟件工程 變遷,實現此思想的相應的方法也變遷,那么相應的從業人員的技能要求也要變遷。

換句話來說:IT行業的領域崗位,必須要掌握開發技能,如果不做出一些改變和提升,那么接下來的現象就是開發人員全線開始占領IT領域類的崗位了

3   持續集成實踐

持續集成的典型的工具就是開源系統 Jenkins。通過對 Jenkins 工具的應用的研究,繪制了一個全流水線的軟件開發圖,如下:


前期 CI 環境准備:

  1. 開發人員都開發好相應的代碼
    • 功能開發人員開發好產品特性代碼
    • 發布人員開發好自動化構建和發布代碼
    • 測試人員開發好自動化測試代碼
  2. 使用 Jenkins 工具將這些工具鏈都組合起來

  3. 將流水線調試成功,所有環境搭建好

以上相當於是CI體系的建立階段,是會有一定的技術力量投入,但是后面的反復迭代過程,則是來收回這些成本的。

后期迭代工作流:

  1. 開發人員向git服務器指定分支提交了新的代碼

  2. git服務器的 webhook 接收到提交事件后向 Jenkins 服務器指定接口發起請求,執行構建腳本

  3. Jenkins 服務器順序執行構建腳本
    • 從git服務器上面同步代碼
    • 執行自動構建腳本,生成交付物
    • 自動搭建測試環境
  4. Jenkins 執行自動化測試腳本

  5. Jenkins 向 自動化發布 系統發起請求

  6. 自動化發布系統 進行自動灰度發布

  7. 觸發 自動化測試系統

  8. 逐步全網發布

基本上,如上步驟可以全自動化無人值守完成。整個過程高效且不容易出錯,對比手工式的生產模式,持續集成手段將極大地減少每次迭代的周期,保證整體項目可以按照極小的步伐和極高的頻率進行穩步演進。

4   階段小結

此文作為 持續集成 系列文章的開端,還有一些偏重於理論部分,以讓大家對整體架構有所了解,同時也建立起現代的軟件工程的整體觀念。

后續的部分將側重於環境搭建及相應的環境代碼的開發的介紹,最后能夠形成一套完整的能夠提供生產力的 持續集成 系統。


作者: Harmo哈莫
作者介紹: https://zhengwh.github.io
技術博客: http://www.cnblogs.com/beer
Email: dreamzsm@gmail.com
QQ: 1295351490
時間: 2015-11
版權聲明: 歡迎以學習交流為目的讀者隨意轉載,但是請 【注明出處】
支持本文: 如果文章對您有啟發,可以點擊博客右下角的按鈕進行 【推薦】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM