發(fā)布時間:2018-07-24作者:研華科技(中國)有限公司
研華WISE-PaaS工業(yè)物聯(lián)網(wǎng)云平臺在不斷地升級完善中,我們每周四為您播報其更新動態(tài)~
今天要為大家介紹的是WISE-PaaS平臺上新導(dǎo)入的DevOps持續(xù)交付服務(wù)。
實(shí)操過的小伙伴應(yīng)該都清楚,軟件交付需要經(jīng)過構(gòu)建、測試、部署等很多復(fù)雜的過程,如果主要依賴人工去完成這個流程需要花費(fèi)很多的時間,延誤產(chǎn)品的上線發(fā)布。
而研華DevOps集文化、實(shí)踐和工具于一身,以開發(fā)團(tuán)隊和運(yùn)維團(tuán)隊的密切合作為核心,通過平時的工作實(shí)踐將交付過程打造成一條包含開發(fā)、構(gòu)建、測試、發(fā)布、部署、運(yùn)維等步驟的標(biāo)準(zhǔn)化流程,并用各種工具將其自動化,最終實(shí)現(xiàn)產(chǎn)品的快速高質(zhì)量交付,并提供7*24小時不間斷的服務(wù)。
了解了什么是DevOps,我們就從技術(shù)架構(gòu)上具體看看這個持續(xù)交付解決方案。
? Jenkins+Kubernetes實(shí)現(xiàn)應(yīng)用自動化持續(xù)發(fā)布 ?
總體技術(shù)架構(gòu)
解決方案最上層提供了CodePipeline服務(wù),CodePipeline是一款具有持續(xù)集成/持續(xù)交付能力,并能兼容Jenkins的SaaS化產(chǎn)品。通過使用CodePipeline,可以使客戶方便的在云端實(shí)現(xiàn)從代碼到應(yīng)用的持續(xù)集成和交付,方便客戶快速的對產(chǎn)品進(jìn)行功能迭代和演進(jìn)。
整個解決方案的核心是Jenkins,Jenkins提供了軟件開發(fā)的持續(xù)集成服務(wù),它通過Master/Agent架構(gòu)可以實(shí)現(xiàn)分布式構(gòu)建,將不同的任務(wù)下發(fā)到多臺機(jī)器(Jenkins Node)執(zhí)行,提高處理性能。
解決方案最下層通過Kubernetes來管理Jenkins的節(jié)點(diǎn),當(dāng)有構(gòu)建任務(wù)時會自動創(chuàng)建一個Docker Container來完成構(gòu)建任務(wù),當(dāng)任務(wù)結(jié)束后Container會自動銷毀,資源動態(tài)使用動態(tài)銷毀,避免資源浪費(fèi),并且無需擔(dān)心代碼或者構(gòu)建物外泄。
傳統(tǒng)的 Jenkins Master/Agent方式可以幫助用戶實(shí)現(xiàn)分布式構(gòu)建,提高處理性能,但是在使用時還是會存在很多缺點(diǎn),比如:
?當(dāng)Master節(jié)點(diǎn)發(fā)生故障時,便無法再進(jìn)行任何構(gòu)建任務(wù);
?為了完成不同語言的編譯打包等任務(wù),會創(chuàng)建很多Jenkins Node,但是這些Node的環(huán)境又很難復(fù)制,導(dǎo)致管理和維護(hù)都很困難;
?資源分配不均衡,有些Node使用率比較高,會出現(xiàn)Job排隊的情況,但有些使用率比較低的Node卻很多時候又處于空閑,導(dǎo)致資源的浪費(fèi);
為了解決以上種種問題,需要尋找一種更可靠更高效的方式來完成 CI/CD 流程,使用Kubernetes 搭建 Jenkins 集群的架構(gòu)便解決了這些問題,如下圖所示。
在這種架構(gòu)中,Jenkins Master 和 Jenkins Agent以Docker Container 形式運(yùn)行在 Kubernetes 集群的 Node 上, 創(chuàng)建一個持久化的Volume用來存儲Jenkins服務(wù)的數(shù)據(jù),當(dāng)Master出現(xiàn)故障時,可以保證數(shù)據(jù)不會丟失。創(chuàng)建JenkinsAgent使用的Docker Image保存在Docker存儲服務(wù)中(比如Docker Hub),便于管理和復(fù)用。Jenkins Agent會根據(jù)需要拉取Docker Image動態(tài)創(chuàng)建和銷毀,不會一直占用資源。
? WISE-PaaS SRP持續(xù)交付流程 ?
1. 開發(fā)人員提交代碼到代碼倉庫,通過GitLab的WebHook會觸發(fā)Jenkins上面自動構(gòu)建的Job;
2. 自動構(gòu)建的Job執(zhí)行后會將構(gòu)建生成的產(chǎn)物存儲到Storage Service,比如Blob;
3. 編譯成功后會觸發(fā)Jenkins上面自動部署的Job,從Storage拉取編譯產(chǎn)物部署到準(zhǔn)生產(chǎn)區(qū);
4. 部署之后會自動執(zhí)行SmokeTest,SmokeTest通過后,QA還會進(jìn)行系統(tǒng)測試、性能測試、壓力測試等全面的測試;
5. 測試通過后觸發(fā)Jenkins上面自動部署的Job將編譯產(chǎn)物部署到生產(chǎn)區(qū);
傳統(tǒng)模式下,如果要更新應(yīng)用,基本上無可避免會存在宕機(jī)時間。而借助研華的DevOps持續(xù)交付服務(wù),則可以實(shí)現(xiàn)不間斷服務(wù)的更新,這得力于平臺上設(shè)置的藍(lán)綠部署。
? 藍(lán)綠部署:實(shí)現(xiàn)不間斷服務(wù)的更新 ?
藍(lán)綠部署是軟件部署模式的一個術(shù)語,藍(lán)色是現(xiàn)在正在運(yùn)行的當(dāng)前版本,綠色則是更新的版本。
我們先部署綠色版本,然后對綠色版本執(zhí)行冒煙測試。通過測試后,才將應(yīng)用流量逐步切換到綠色版本,然后監(jiān)控綠色版本,一旦異常,立刻回滾到藍(lán)色版本。整個過程高效迅速,可以保證0宕機(jī)升級,服務(wù)不間斷。
WISE-PaaS App能夠?qū)崿F(xiàn)藍(lán)綠部署,主要是因?yàn)槠脚_支持App通過Scale實(shí)例個數(shù)來分擔(dān)流量,比如藍(lán)的版本有6個實(shí)例,目前用戶訪問的所有流量都集中在藍(lán)的版本上。需要升級時,我們先部署只有一個實(shí)例的綠的版本,測試通過后,我們會將其Scale到4個實(shí)例,并將用戶使用的Route Map到綠的版本上,并且將藍(lán)的版本Scale為2個實(shí)例,這個時候,綠的版本正式被用戶所用,并且分擔(dān)了67%的流量,然后再繼續(xù)將綠的版本Scale到6個實(shí)例,并且將藍(lán)的版本Stop,最終所有流量成功導(dǎo)入到綠的版本,并且升級過程中不會出現(xiàn)宕機(jī)的時刻。
在快速發(fā)展的云時代,軟件產(chǎn)品層出不窮,為了搶奪先機(jī),第一時間將產(chǎn)品上市,快速發(fā)布和保證質(zhì)量成為產(chǎn)品取勝至關(guān)重要的因素。遵循DevOps的交付理念,可以幫助開發(fā)人員第一時間發(fā)現(xiàn)軟件中的缺陷,保證產(chǎn)品快速和高質(zhì)量上線,并提供不間斷的服務(wù),提高客戶的滿意度和產(chǎn)品的市場競爭力。所以DevOps已經(jīng)成為軟件驅(qū)動型企業(yè)在云時代取得成功的關(guān)鍵。
Copyright ? 2015 ilinki.net Inc. All rights reserved. 智匯工業(yè)版權(quán)所有
電話:010-62314658 郵箱:service@ilinki.net
主辦單位:智匯萬聯(lián)(北京)信息技術(shù)有限公司