9月6日,由深圳金融信息服務(wù)協(xié)會(huì)主辦,我公司(深圳睿云智合科技有限公司)與Rancher Labs聯(lián)合協(xié)辦的,深圳金融IT界容器技術(shù)專題研討會(huì)隆重召開并勝利閉幕!會(huì)議匯聚了國內(nèi)外知名的云計(jì)算技術(shù)大咖,以及招商銀行、平安科技、富德生命人壽、廣發(fā)證券等國內(nèi)金融科技引領(lǐng)企業(yè)的容器技術(shù)實(shí)踐團(tuán)隊(duì)的經(jīng)驗(yàn)分享,為150多人的在場(chǎng)嘉賓奉上了一場(chǎng)堪稱金融行業(yè)與最前沿容器技術(shù)的巔峰碰撞!除了深圳本地的金融行業(yè)技術(shù)人員,更有來自北京、上海、東北的多家金融機(jī)構(gòu)信息技術(shù)團(tuán)隊(duì)積極參與,大家紛紛表示會(huì)議干貨多多,收獲頗豐。以下就是小編為大家整理的嘉賓分享內(nèi)容系列速遞,按照演講順序,今天為大家推出的是來自前Eucalyptus 架構(gòu)師&中國區(qū)技術(shù)總監(jiān),現(xiàn)睿云智合CTO,國內(nèi)云計(jì)算資深專家徐年剛(Nathan)的分享:《金融行業(yè)基于容器技術(shù)的DevOps》
究竟DevOps是什么?DevOps是如何促進(jìn)開發(fā)、測(cè)試、運(yùn)維一體化?在企業(yè)有哪些實(shí)踐?以及DevOps和容器技術(shù)有什么關(guān)系?CI/CD有哪些常見的解決方案?相信Nathan接下來的分享都會(huì)給大家一些重要的啟發(fā)。
DevOps 介紹和實(shí)踐
首先,Nathan簡(jiǎn)單的介紹了軟件產(chǎn)品交付變革。在之前的軟件交付中,軟件的設(shè)計(jì)規(guī)劃,占用的時(shí)間都比較長(zhǎng),導(dǎo)致交付到客戶手中的時(shí)間就較長(zhǎng)。隨著互聯(lián)網(wǎng)的飛速發(fā)展,現(xiàn)在的交付理念是:小步快跑的方式交付產(chǎn)品,收集用戶反饋,持續(xù)對(duì)產(chǎn)品進(jìn)行改進(jìn)。之前我們更多是在講敏捷開發(fā)、而現(xiàn)在更多是DevOps開發(fā)運(yùn)維協(xié)作一體化,在企業(yè)中已經(jīng)得到了許多實(shí)踐應(yīng)用。
一
什么是DevOps?
A DevOps是英文Development和Operations的組合
B DevOps是一組過程、方法與系統(tǒng)的統(tǒng)稱:用于促進(jìn)開發(fā)(應(yīng)用程序/軟件?工程)、技術(shù)運(yùn)營和質(zhì)量保障(QA)部門之間的溝通、協(xié)作與整合,這才是DevOps的宗旨。
二
DevOps企業(yè)實(shí)踐
DevOps在企業(yè)中的實(shí)踐主要從四個(gè)方面來實(shí)施:
- 持續(xù)部署(CI/CD)
- 度量和反饋(持續(xù)運(yùn)營)
- 組織協(xié)作(建立全功能團(tuán)隊(duì))
- 架構(gòu)解耦(系統(tǒng)解耦,技術(shù)解耦)
由于此次研討嘉賓實(shí)在大咖,而時(shí)間卻有限,所以Nathan這一次先給我們介紹CI/CD。怎么開始CI/CD實(shí)踐呢?主要是從以下5個(gè)方面。
持續(xù)集成/部署流水線
這個(gè)環(huán)節(jié)是怎么樣實(shí)現(xiàn)的呢?開發(fā)者提交代碼觸發(fā)代碼更新,然后自動(dòng)CI構(gòu)建,在等待構(gòu)建成功之后,開始部署和執(zhí)行自動(dòng)化功能測(cè)試。自動(dòng)化部署成功之后,觸發(fā)手動(dòng)部署UAT或者生產(chǎn)環(huán)境上以及非功能性測(cè)試。說這么多,流水線內(nèi)部是怎么樣的呢?如下圖:
圖1:基本CI構(gòu)建
圖2:?自動(dòng)化功能、契約測(cè)試
圖3:部署手動(dòng)測(cè)試
那怎樣CI/CD流水線設(shè)計(jì)才算是好的呢?
- 可視化:流水線的運(yùn)行和停止,成功與失敗對(duì)所有人直觀可見;通過大顯示器投放給整個(gè)團(tuán)隊(duì)
- 反饋:流水線通過顯示器,短信,郵件等多種手段及時(shí)將失敗信息傳達(dá)到相關(guān)團(tuán)隊(duì)成員
- 可控制:從構(gòu)建到生產(chǎn)發(fā)布總有一些環(huán)節(jié)是需要人手動(dòng)驗(yàn)證的,比如UAT,發(fā)布前的批準(zhǔn)等;端到端的流水線需要某些環(huán)節(jié)可以暫停,等待手動(dòng)繼續(xù)
- 門禁:流水線中任何一個(gè)環(huán)節(jié)失敗應(yīng)該讓流水線停下來,并通知團(tuán)隊(duì),比如自動(dòng)化測(cè)試不通過,Schema升級(jí)失敗等
- 關(guān)注度:當(dāng)流水線發(fā)生失敗時(shí)團(tuán)隊(duì)必須立刻有人關(guān)注并解決它,否則流水線的反饋對(duì)團(tuán)隊(duì)的作用就會(huì)大打折扣。Time in “Red”是對(duì)流水線關(guān)注度的一個(gè)重要度量指標(biāo)
內(nèi)建質(zhì)量
內(nèi)建質(zhì)量即在軟件產(chǎn)生的各個(gè)環(huán)節(jié)中建立固化的、自動(dòng)化的質(zhì)量保障體系。
我們來看下一個(gè)比較經(jīng)典的質(zhì)量控制體系案例:
- 靜態(tài)程序分析
利用代碼分析工具,不執(zhí)行代碼的情況下對(duì)其質(zhì)量進(jìn)行檢查,包括重復(fù)代碼,安全漏洞,及各種代碼壞味道;
- 單元測(cè)試
直接調(diào)用應(yīng)用代碼,對(duì)程序的輸入與輸出,以及執(zhí)行過程是否符合預(yù)期進(jìn)行測(cè)試;單元測(cè)試不能僅強(qiáng)調(diào)覆蓋率,而要進(jìn)行評(píng)審,保證有效性和場(chǎng)景覆蓋的完整性;
- 自動(dòng)化契約測(cè)試
系統(tǒng)提供的每一個(gè)接口(Web服務(wù),MQ或其他)都是與其消費(fèi)者所達(dá)成的契約,都必須要有對(duì)應(yīng)的自動(dòng)化測(cè)試;
- 自動(dòng)化部署驗(yàn)證
在生產(chǎn)環(huán)境部署完成后,通過自動(dòng)化方法對(duì)其部署是否成功,應(yīng)用和服務(wù)的運(yùn)行狀態(tài)進(jìn)行驗(yàn)證,以判斷該部署的新版本是否能夠向用戶開放;
- 自動(dòng)化界面測(cè)試
通過模擬真實(shí)人在界面上與系統(tǒng)的交互,對(duì)系統(tǒng)的完整業(yè)務(wù)流程進(jìn)行驗(yàn)證;這種測(cè)試方法更貼近真實(shí),但執(zhí)行效率也較低;
- 自動(dòng)化非功能測(cè)試
非功能測(cè)試包括性能測(cè)試,壓力測(cè)試,安全性測(cè)試等,也應(yīng)當(dāng)集成到端到端的部署流水線中;不過并非每一個(gè)故事或特性都需要非功能測(cè)試
基礎(chǔ)設(shè)施即代碼
基礎(chǔ)設(shè)施即代碼,怎么做呢?腳本化一切可以腳本化的、用版本控制庫管理所有腳本和代碼、禁止人工操作。
- 構(gòu)建
利用Shell腳本文件(.sh)或自動(dòng)構(gòu)建工具來進(jìn)行應(yīng)用和服務(wù)的依賴管理,編譯,執(zhí)行測(cè)試,和生成安裝包、部署包。
不同的語言有不同的構(gòu)建工具,如Java的Maven,Gradle;C/C++/Objective C的gcc, CMake, Ruby的Rake等。
- 環(huán)境配置
利用自動(dòng)化環(huán)境管理工具來進(jìn)行服務(wù)器上的軟件安裝,升級(jí),配置,服務(wù)的啟動(dòng)和停止,權(quán)限設(shè)置,文件操作等各種任務(wù)。
目前成熟常用的IT自動(dòng)化管理工具包括Puppet,Chef,Ansible等。
- 數(shù)據(jù)庫變更
利用數(shù)據(jù)庫自動(dòng)化管理工具進(jìn)行數(shù)據(jù)庫Schema的創(chuàng)建,更新,數(shù)據(jù)初始化,數(shù)據(jù)遷移等任務(wù)。
自動(dòng)化部署
自動(dòng)化部署主張:一次打包,隨處部署。環(huán)境配置信息必須從代碼中剝離,剝離的環(huán)境配置文件不放進(jìn)應(yīng)用軟件包,以文件或獨(dú)立jar包的形式單獨(dú)部署(WebSphere,Tomcat都支持共享classpath)。且可采用配置模板文件,打包時(shí)自動(dòng)替換環(huán)境參數(shù)。
- 服務(wù)器應(yīng)用部署
- 基本步驟是Server shutdown,Package upload and copy,Server startup。
- 可以采用Chef,Ansible等自動(dòng)化工具進(jìn)行自動(dòng)部署。
- 采用其他商業(yè)化的部署工具。
- 客戶端或移動(dòng)應(yīng)用
- 將應(yīng)用包上傳到特定的位置供用戶下載;如果是企業(yè)應(yīng)用發(fā)布平臺(tái),建議由平臺(tái)提供部署服務(wù);或者提供權(quán)限進(jìn)行包文件上傳。
- 如果是部署到外部應(yīng)用商店,如Google Play,由于頻率不高通常手動(dòng)進(jìn)行,也可以采用自動(dòng)化Web測(cè)試的方法進(jìn)行自動(dòng)form提交部署。
- 數(shù)據(jù)庫變更
1.可以采用Flyway進(jìn)行數(shù)據(jù)庫自動(dòng)部署,前提是數(shù)據(jù)庫基線和所有變更都已腳本形式在版本控制庫中。
2.數(shù)據(jù)庫變更前自動(dòng)備份。
3.采用NoSQL數(shù)據(jù)庫,如MongoDB等,免去Schema變更的需要。
運(yùn)維監(jiān)控
? 系統(tǒng)監(jiān)控:通過監(jiān)控工具對(duì)包括服務(wù)器運(yùn)行狀態(tài),比如CPU,網(wǎng)絡(luò)流量,磁盤,內(nèi)存等,進(jìn)行實(shí)時(shí)監(jiān)控,并及時(shí)告警
? 應(yīng)用和服務(wù)監(jiān)控:對(duì)運(yùn)行中的應(yīng)用和服務(wù)的健康度進(jìn)行監(jiān)控,包括Web是否可訪問,服務(wù)是否可用,訪問并發(fā)數(shù),響應(yīng)速度等;定期進(jìn)行檢測(cè)以便在用戶報(bào)告問題之前及早發(fā)現(xiàn)風(fēng)險(xiǎn)
? 特性監(jiān)控:對(duì)某些關(guān)鍵特性的(業(yè)務(wù))正確性進(jìn)行持續(xù)的驗(yàn)證,監(jiān)控其數(shù)據(jù)一致性等。這一類監(jiān)控完成的,而是個(gè)持續(xù)的過程,每發(fā)布一個(gè)新特性,可能就需要增加一些監(jiān)控手段
DevOps 和容器技術(shù)
既然容器技術(shù)現(xiàn)在正在以指數(shù)的增長(zhǎng)趨勢(shì)發(fā)展,那先來看看大家都是怎么使用容器的吧!
那容器將如何促進(jìn)DevOps在企業(yè)中落地呢?
用容器打包應(yīng)用
- 應(yīng)用交付件標(biāo)準(zhǔn)化:使用鏡像,實(shí)現(xiàn)應(yīng)用的標(biāo)準(zhǔn)化交付。
- 將應(yīng)用和依賴環(huán)境封裝在一起, 解決環(huán)境依賴問題。
- Build, Ship, Run
用容器來實(shí)現(xiàn)自動(dòng)化部署
利用容器,將應(yīng)用和環(huán)境封裝,解決環(huán)境部署一致性問題,方便實(shí)現(xiàn)應(yīng)用的自動(dòng)化部署。
- 取代過去傳統(tǒng)的用腳本進(jìn)行配置環(huán)境、應(yīng)用部署的方法。
- 在部署平臺(tái)上實(shí)現(xiàn)一整個(gè)開發(fā)/測(cè)試環(huán)境的一鍵部署。
- 在實(shí)現(xiàn)自動(dòng)部署的同時(shí),在平臺(tái)提供各種高級(jí)部署功能。
- 滾動(dòng)更新,藍(lán)綠發(fā)布。
三
用容器來優(yōu)化流水線任務(wù)
- 將每個(gè)流水線任務(wù)所依賴的運(yùn)行環(huán)境制作成的容器鏡像
- 流水線上的任務(wù)非常適合在容器中執(zhí)行,快速啟動(dòng),執(zhí)行完后銷毀,適合大規(guī)模,并發(fā)的流水線任務(wù)
- 靈活的流水線設(shè)計(jì),只需要在執(zhí)行任務(wù)的時(shí)候選擇不同的基礎(chǔ)鏡像,就可以使用不同的技術(shù)堆棧來完成流水響任務(wù)
- 解決流水線任務(wù)的環(huán)境沖突,比如可以在同一個(gè)構(gòu)建系統(tǒng)里面同時(shí)用JDK8 或者JDK5 來編譯應(yīng)用
CI/CD解決方案
利用開源Jenkins 和?配套工具鏈
以Jenkins 核心,結(jié)合其他工具鏈來實(shí)現(xiàn)持續(xù)集成和部署, 包括集成:
- 代碼管理
- 質(zhì)量控制框架
- 自動(dòng)化部署工具或者平臺(tái)
涌現(xiàn)的其他開源/商業(yè)方案
除了Jenkins, 目前也涌現(xiàn)非常多的以持續(xù)集成的方案
- Drone
- Go-CD
- TeamCity
- Travel-CI
- PAAS 平臺(tái)
以Jenkins 為核心研發(fā)
Jenkins 的集成能力非常強(qiáng),但功能太多,以Jenkins 為核心,簡(jiǎn)化和工具鏈的集成,整合容器技術(shù)。
我們將以睿云智合的實(shí)踐來說明。
- 開箱即用,簡(jiǎn)化和正確地打造企業(yè)CI/CD 流水線。
- 基于容器的CI/CD集成方案,開箱即用。
- WiseBuild 簡(jiǎn)化CI/CD各種技術(shù)棧的集成和實(shí)施,以pipeline為核心,整合各種持續(xù)部署/集成流水線相關(guān)的構(gòu)建,測(cè)試,部署技術(shù)。
- WiseBuild用于開發(fā),測(cè)試和運(yùn)維團(tuán)隊(duì)的提供靈活的CI/CD流失線設(shè)計(jì)平臺(tái),應(yīng)到開發(fā),測(cè)試和運(yùn)維團(tuán)隊(duì)正確的設(shè)計(jì)企業(yè)持續(xù)集成,持續(xù)部署流水線。
- Rancher是成熟的容器管理平臺(tái),為應(yīng)用的自動(dòng)化部署提供成熟的功能支持
- 集成平臺(tái)– 持續(xù)集成&持續(xù)部署
- 以流水線為中心,持續(xù)集成
- Pipeline as code!靈活的流水線設(shè)計(jì),可以為每個(gè)開發(fā)應(yīng)用定義多條流水線,分別用于持續(xù)集成和部署,流水線可以包含多個(gè)stage。每個(gè)stage 用來實(shí)現(xiàn)代碼編譯,單元測(cè)試,集成測(cè)試等。
- 集成各種質(zhì)量框架,包括代碼檢查,自動(dòng)化測(cè)試框架支持自動(dòng)生成容器鏡像支持從構(gòu)建物自動(dòng)生成面向開發(fā)人員的開發(fā)測(cè)試環(huán)境。
- 為開發(fā)者的單元測(cè)試,集成測(cè)試提供服務(wù)集成,例如數(shù)據(jù)庫集成服務(wù)支持自動(dòng)化部署各種驗(yàn)收測(cè)試環(huán)境對(duì)接持續(xù)集成流水線和驗(yàn)收測(cè)試環(huán)境的對(duì)接,實(shí)現(xiàn)驗(yàn)收測(cè)試環(huán)境的自動(dòng)更新和升級(jí)。
4.自動(dòng)部署?&持續(xù)部署
- 支持從容器管理平臺(tái)導(dǎo)入各種運(yùn)行環(huán)境,設(shè)計(jì)支持CaaS平臺(tái)和PaaS平臺(tái)目前支持Rancher 平臺(tái),支持Rancher的cattle, swarm, kubernets環(huán)境。
- 支持和部署相關(guān)的流水線,可以代碼部署分支拉取代碼,編譯,部署和做自動(dòng)驗(yàn)證測(cè)試。
- 支持在Rancher 環(huán)境自動(dòng)化部署應(yīng)用,對(duì)接應(yīng)用和部署流水線。