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

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

1   概述

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

持續集成 至關於將傳統工業的 流水線 做業的思想應用到現代的 軟件工業 中來。不一樣之處在於,工業流水線 最終出來的是一個一個的產品複製體,可是 軟件流水線 最終出來的是一代一代更新迭代的版本,可是共同點在於:總體產出的效率將極大地增長。github

首先說CI解決了的問題:web

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

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

[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
版權聲明: 歡迎以學習交流爲目的讀者隨意轉載,可是請 【註明出處】
支持本文: 若是文章對您有啓發,能夠點擊博客右下角的按鈕進行 【推薦】
相關文章
相關標籤/搜索