專案DevOps研發雲CI實踐之路
使用敏捷或其他軟體開發過程與方法,專案要求加快產品交付的速率,虛擬化和雲端計算基礎設施(可能來自內部或外部供應商)日益普遍,都促使我們不斷向DevOps方向發展。
因此,現在的業務開發,對傳統的CI提出了更新更高的要求,藉助於雲技術,我們可以在DesOps趨勢下實現從傳統CI向雲化CI的演變。
一、專案痛點
筆者所在專案在敏捷推進過程中,已經建立了一套以Jenkins為核心的CI持續整合系統,相信很多專案也是通過Jenkins來構建專案自己的CI防護網的。
基於CI持續整合系統對敏捷的重要性,穩定和高效成為了CI整合系統最重要的兩個要素。
在實際使用過程中,各種型別的編譯環境,部署安裝、配置維護,成本越來越大,工作重複、效率低;隨著CI整合越來越複雜,對裝置的效能、穩定性要求越來越高,維護成本也越來越高,越來越專業,需要人員有專門的技能才能維護。
同時隨著敏捷的深入,快速交付、快速部署,對CI整合時間、週期、效率提出了更高的要求,CI系統的效率和反饋速度也成為瓶頸。產品級敏捷也期望能夠全程監控CI的過程質量,全方位度量、質量保證,對CI系統提出了更高的要求。
綜上所述,總結一下專案在持續整合方面的痛點:
- 效率低下
- 環境複雜
- 基礎設施維護困難
- CI質量狀況難以實時監控
二、解決思路
現在DevOps概念在業界比較火熱,並逐漸成為趨勢。這也讓我們覺得藉助雲端計算和DevOps理念來進一步持續推進傳統CI,正是我們需要的。
三、實踐情況
1、入雲方案
(1)OKR驅動
OKR驅動,本著向更有價值,更有挑戰性的目標衝刺的原則。
在部門的改進工作坊上,結合專案的痛點,大家一起制定了專案的DevOps貫通OKR計劃。跟隨著公司研發雲專案的不斷演進過程中,逐漸認識到雲CI在DevOps推進過程中,越來越扮演著非常重要的角色。
經過研究,雲CI使用到的Jenkins和Docker技術,以及雲內的計算資源,能夠助力後面的雲託管、雲構建,所以CI上雲成為我們DevOps推進中非常有價值的事情。
(2)總體方案
藉助雲端計算的發展,傳統CI向雲CI進行演進。
- CloudCI(http://cloudci.zte.com.cn/)
雲Jenkins伺服器,優勢:CloudCI是基於Docker叢集的雲Jenkins伺服器 - Mesos叢集(基於Docker,CloudCI已整合為Mesos節點)
海量雲資源,優勢:可共享,隨用隨申請,使用結束自動釋放。 - Docker映象倉庫
- Mesos叢集+Docker映象,構成CI任務執行環境
(3)總體流程
流水線任務優化和拆分,序列變並行,資源雲化,度量及時反饋。
- Step1 程式碼入庫
程式碼通過Pha評審,提交到程式碼託管SVN倉庫。 - Step2 Jenkins任務執行
程式碼入庫,觸發雲Jenkins伺服器執行CI任務,CI任務並行同時觸發執行。CI整流水線速度取並行任務的最長時間,相比原來的序列累加速度提升明顯。 - Step3 資料採集
資料採集任務,在CI任務執行過程中採集專案度量資料(如程式碼行數、靜態檢查資料等),以及CI任務的執行次數、成功率等資料。以Shell和Python為主的指令碼庫作為資料採集的支撐,採集資料自動接入無線度量系統。 - Step4 度量報告
在度量系統建立統計模型,每天以郵件方式自動輸出度量報告,用於專案/團隊及時反饋和改進開發,形成閉環。
2、CI入雲準備
(1)執行環境標準化
主要的原則是:環境分類、標準化,利用Docker技術資源雲化。
執行環境標準化的目的是將CI任務按照執行環境分類管理,並且梳理出每個任務執行所依賴的環境要求(重點:作業系統以及軟體)。
以我們專案IaaS版本構建為例:
- 作業系統:Linux
- 編譯工具:交叉編譯鏈
- 其餘軟體:tcl、bc、zip、bzip2
最終,執行環境需要使用Docker技術實現容器化,實現Ship&Run。
(2)CI任務整理優化
主要的原則是:任務拆分,去依賴和狀態,序列變並行。
- Job拆分:根據專案特性拆分,以更好的利用雲端彈性伸縮特性
- 去依賴化:隔離CI全流程中工具鏈等因素對物理機/虛機的依賴
- 去狀態化:轉化/消除CI全流程中各job對於實體機/虛機狀態化的需求,如各種快取等
3、部署實施
(1)CI任務配置執行
相比於以前,現在CI Jenkins任務的部署就非常簡單,尤其是使用Mesos叢集的任務,可以簡單到只需要下面這樣Pull&Run:
docker pull mirrors.zte.com.cn:5000/ft-cloudci-centos:latest docker run --rm mirrors.zte.com.cn:5000/ft-cloudci-centos
4、相關技術
因為需要使用到Linux、Docker和Jenkins,所以這些相應的技術要熟悉。
另外,CI任務改並行後,必須要考慮多工並行時,程式碼檔案(含二進位制檔案)在Mesos叢集機器中動態掛載的問題。
經過實踐,建議的檔案掛載方式如下:
- Svn全量檢出
低效不建議採用,參考資料:1.8G程式碼,下載速度:8-15min。 - Git/Gerrit全量檢出
高效,參考資料:1.8G程式碼,下載速度:雲內30-40s,雲外1-2min。 - Rsync全量同步
高效,參考資料:1.8G程式碼,下載速度:雲內2-4min。 - 增量更新+網路共享
未來的優化方向,研究中。程式碼增量更新,通過網路共享(NFS/Ceph)到Mesos叢集,然後再docker –v掛載到執行容器。
四、效果評價
通過CI上雲,解決了專案CI的四個痛點。
現狀:版本已經上線,任務優化和拆分,序列變並行,資源雲化
收益:
- 效率:Jenkins任務序列變並行,整版本構建速度和流水線執行速度大幅提升
- 環境:環境構建實現自動化與標準化
- 基礎設施維護:公司統一維護,無需專案額外指定專人維護
- 質量控制:度量系統實時監控,及時反饋
原文釋出時間為:2016-12-05
本文作者:尼古拉斯
本文來自雲棲社群合作伙伴Dockerone.io,瞭解相關資訊可以關注Dockerone.io。
原文標題:專案DevOps研發雲CI實踐之路
相關文章
- COMPASS專案CI實踐
- 自研DevOps實踐dev
- DevOps GitLab CICD 實踐3——CI檔案編寫devGitlab
- 【敏捷研發系列】前端DevOps流水線實踐敏捷前端dev
- 大型前端專案 DevOps 沉思錄 —— CI 篇前端dev
- DevOps峰會 | 研發效能實踐助力網際網路行業專案管理“行之有效”dev行業專案管理
- CI Weekly #17 | flow.ci 支援 Java 構建以及 Docker/DevOps 實踐分享JavaDockerdev
- DevOps研發模式下「產品質量度量」方案實踐dev模式
- CI Weekly #9 | 揭祕阿里 Docker 化實踐之路阿里Docker
- DevOps 在企業專案中的實踐落地dev
- Go-Zero 短鏈專案 DevOps 實戰,利用 Drone CI/CD 打通上雲(Kubernetes)迭代流程Godev
- CI Weekly #3 | 關於微服務、Docker 實踐與 DevOps 指南微服務Dockerdev
- 從.net開發做到雲原生運維(八)——DevOps實踐運維dev
- .NetCore 配合 Gitlab CI&CD 實踐 - 單體專案NetCoreGitlab
- DevOps雲翼日誌服務實踐dev
- 得物自研API閘道器實踐之路API
- 阿里雲NAS檔案遷移專案實踐阿里
- DevOps實踐dev
- 萬字長文|詳解優維科技內部DevOps研發實踐|演講實錄dev
- 走進雲研發時代 阿里雲釋出雲原生DevOps解決方案阿里dev
- 華為雲的Kubernetes實踐之路
- 雲擴研習社 | RPA流程開發最佳實踐(下)
- 雲擴研習社 | RPA流程開發最佳實踐(上)
- 在騰訊雲容器服務 TKE 中實踐 DevOpsdev
- DevOps 實踐指南dev
- 研發專案該如何管理?
- 研發專案管理點滴專案管理
- Gitlab CI 與 DevOpsGitlabdev
- 小程式雲開發專案實戰
- mobx專案實踐
- vue實踐06-專案實踐Vue
- 容器雲多叢集環境下如何實踐 DevOpsdev
- Flutter新銳專家之路:工程研發體系篇Flutter
- 【DevOps進行時】持續交付廣義流水線探索 - 農行DevOps實踐之路 | LEANSOFTdev
- CI Weekly #2 | 如何優化開發流程,實現專案持續整合?優化
- 基於 GitLab CI 的前端工程CI/CD實踐Gitlab前端
- CI Weekly #6 | 再談 Docker / CI / CD 實踐經驗Docker
- 淺談研發專案經理