DevOps敏捷開發(fā)實(shí)踐

背景

傳統(tǒng)軟件開發(fā)的瀑布模型已經(jīng)過時(shí)罢浇,敏捷方法正在迅速取而代之雁芙。與DevOps一起舰攒,敏捷幫助開發(fā)和運(yùn)維團(tuán)隊(duì)共同創(chuàng)建了一個(gè)強(qiáng)大且可預(yù)測(cè)的軟件交付方式。作為轉(zhuǎn)變的一部分讥此,在使用正確的工具集時(shí)拢锹,諸如持續(xù)集成(CI)和持續(xù)交付(CD)等高級(jí)方法可以實(shí)現(xiàn)從提交到測(cè)試再到部署的高效交付流水線。

無論是在初創(chuàng)公司還是大型企業(yè)萄喳,轉(zhuǎn)向DevOps都可以減少人為錯(cuò)誤的發(fā)生卒稳。該模型允許研發(fā)維持質(zhì)量,同時(shí)加快端到端交付流程他巨。

什么是DevOps?

DevOps 是一套最佳實(shí)踐方法論充坑,旨在應(yīng)用和服務(wù)的生命周期中促進(jìn)IT技術(shù)人員之間的協(xié)作和交流,最終實(shí)現(xiàn):

持續(xù)整合:從開發(fā)到運(yùn)維和支持的輕松切換染突;

持續(xù)部署:持續(xù)發(fā)布捻爷,或盡可能經(jīng)常的發(fā)布;

持續(xù)反饋:在應(yīng)用和服務(wù)生命周期的各個(gè)階段尋求來自利益相關(guān)者的反饋份企。

CI/CD流水線的4個(gè)階段

考慮一個(gè)用例也榄,其中組織正在構(gòu)建一個(gè)產(chǎn)品,其中有多個(gè)遠(yuǎn)程團(tuán)隊(duì)在不同的微服務(wù)上工作司志。每個(gè)團(tuán)隊(duì)都有自己的服務(wù)路線圖和交付計(jì)劃甜紫。為了實(shí)現(xiàn)集成以實(shí)現(xiàn)強(qiáng)大的交付,CI/CD流水線是必須的骂远。使用CI/CD流水線囚霸,只要開發(fā)團(tuán)隊(duì)對(duì)代碼進(jìn)行更改,流水線中的自動(dòng)化就會(huì)導(dǎo)致在各種環(huán)境中自動(dòng)編譯激才,構(gòu)建和部署拓型。

CI/CD流水線可以分為應(yīng)用程序生命周期的四個(gè)階段额嘿。每個(gè)階段都將在CI/CD中發(fā)揮關(guān)鍵作用《质觯可用的工具將有助于實(shí)現(xiàn)交付的一致性,速度和質(zhì)量钞脂。如下所示揣云,四個(gè)階段是源代碼,構(gòu)建冰啃,測(cè)試和部署邓夕。


1.源代碼

組織將應(yīng)用程序代碼存儲(chǔ)在集中式存儲(chǔ)庫系統(tǒng)中,以支持版本控制阎毅,跟蹤更改焚刚,協(xié)作和審計(jì),以及確保安全性并保持對(duì)源代碼的控制扇调。 此階段的關(guān)鍵元素是版本控制的自動(dòng)化矿咕。 我們可以將其視為CI階段的基線單位。自動(dòng)化涉及監(jiān)視版本控制系統(tǒng)的任何更改和觸發(fā)事件狼钮,例如代碼編譯和測(cè)試碳柱。

假設(shè)你正在與其他團(tuán)隊(duì)成員一起開發(fā)Git存儲(chǔ)庫。每當(dāng)將更改提交到存儲(chǔ)庫時(shí)熬芜,Git webhook都會(huì)觸發(fā)編譯代碼并執(zhí)行單元測(cè)試用例的Jenkins作業(yè)的通知莲镣。如果編譯失敗或測(cè)試用例失敗,則會(huì)自動(dòng)向整個(gè)開發(fā)人員組發(fā)送電子郵件涎拉。

2.構(gòu)建

這是應(yīng)用程序開發(fā)的關(guān)鍵階段瑞侮,當(dāng)完全自動(dòng)化時(shí),它允許開發(fā)團(tuán)隊(duì)每天多次測(cè)試和構(gòu)建他們的版本鼓拧。此階段包括編譯半火,打包和運(yùn)行自動(dòng)化測(cè)試。構(gòu)建自動(dòng)化實(shí)用程序(如Make季俩,Rake慈缔,Ant,Maven和Gradle)用于生成構(gòu)建工件种玛。

然后藐鹤,可以將構(gòu)建工件存儲(chǔ)到工件存儲(chǔ)庫中并部署到環(huán)境中。諸如JFrog Artifactory之類的工件存儲(chǔ)庫解決方案用于存儲(chǔ)和管理構(gòu)建工件赂韵。使用工件存儲(chǔ)庫的主要優(yōu)點(diǎn)是娱节,如果有必要,它們可以恢復(fù)到以前版本的構(gòu)建祭示。高度可用的云存儲(chǔ)服務(wù)(如AWS S3)也可用于存儲(chǔ)和管理構(gòu)建工件肄满。在AWS上運(yùn)行構(gòu)建服務(wù),應(yīng)考慮AWS CodeBuild。 Jenkins是最受歡迎的開源工具之一稠歉,可用于協(xié)調(diào)構(gòu)建過程掰担。

3.測(cè)試

自動(dòng)化測(cè)試在任何應(yīng)用程序開發(fā)--部署周期中都發(fā)揮著重要作用。所需的自動(dòng)化測(cè)試可分為三個(gè)不同的類別:

單元測(cè)試:開發(fā)人員將應(yīng)用程序細(xì)分為小的代碼單元并執(zhí)行測(cè)試怒炸。此測(cè)試應(yīng)該是構(gòu)建過程的一部分带饱,并且可以使用JUnit等工具自動(dòng)執(zhí)行。

集成測(cè)試:在分布式應(yīng)用程序的微服務(wù)領(lǐng)域阅羹,當(dāng)應(yīng)用程序的不同模塊集成時(shí)勺疼,單獨(dú)的組件應(yīng)該工作是很重要的。此階段可能涉及API測(cè)試捏鱼,與數(shù)據(jù)庫集成或其他服務(wù)执庐。此測(cè)試通常是部署和發(fā)布過程的一部分。

功能測(cè)試:這是應(yīng)用程序或產(chǎn)品的端到端測(cè)試导梆,通常作為發(fā)布過程的一部分在登臺(tái)服務(wù)器上執(zhí)行轨淌。它可以通過Selenium等工具實(shí)現(xiàn)自動(dòng)化,以便在不同的Web瀏覽器中高效運(yùn)行看尼。

為了執(zhí)行簡(jiǎn)化的測(cè)試猿诸,JMeter和Selenium等框架工具可以輕松地與Jenkins集成,以自動(dòng)執(zhí)行功能測(cè)試狡忙,作為端到端測(cè)試的一部分梳虽。

4.部署

完成構(gòu)建并完成候選版本的自動(dòng)化測(cè)試后,流水線的最后一個(gè)階段是將新代碼自動(dòng)部署到流水線中的下一個(gè)環(huán)境灾茁。在此階段窜觉,測(cè)試的代碼將部署到暫存或生產(chǎn)環(huán)境。如果新版本在每個(gè)階段都通過了所有測(cè)試北专,則可以將其移動(dòng)到生產(chǎn)環(huán)境中禀挫。有各種部署策略,例如藍(lán)綠部署拓颓,金絲雀部署和就地部署语婴,以便在生產(chǎn)環(huán)境中進(jìn)行部署:

在藍(lán)綠色部署中,將有多個(gè)并行運(yùn)行的生產(chǎn)環(huán)境驶睦。新的“綠色”版本的應(yīng)用程序或服務(wù)與在單獨(dú)的基礎(chǔ)架構(gòu)上運(yùn)行的最后一個(gè)穩(wěn)定的“藍(lán)色”版本并行配置砰左。一旦你的綠色經(jīng)過測(cè)試并準(zhǔn)備就緒,就可以取消配置藍(lán)色场航。

在金絲雀部署中缠导,首先對(duì)較少的節(jié)點(diǎn)進(jìn)行部署,在使用這些節(jié)點(diǎn)進(jìn)行測(cè)試之后溉痢,將部署到所有節(jié)點(diǎn)僻造。

就地部署將代碼直接部署到所有活動(dòng)節(jié)點(diǎn)憋他,并可能導(dǎo)致停機(jī);但是,通過滾動(dòng)更新髓削,您可以減少或消除停機(jī)時(shí)間竹挡。

此外,通過部署立膛,需要考慮三個(gè)關(guān)鍵的自動(dòng)化元素:

??? 云基礎(chǔ)架構(gòu)配置:AWS CloudFormation揪罕,AWS OpsWorks Stacks和Terraform等基礎(chǔ)架構(gòu)管理工具,只需點(diǎn)擊幾下或API調(diào)用旧巾,即可幫助創(chuàng)建模板并將整個(gè)底層應(yīng)用程序堆棧(包括計(jì)算耸序,存儲(chǔ)和網(wǎng)絡(luò))從一個(gè)環(huán)境克隆到另一個(gè)環(huán)境忍些。

??? 使用Chef鲁猩,Puppet和AWS OpsWorks等工具進(jìn)行配置管理自動(dòng)化可確保配置文件處于所需狀態(tài),包括操作系統(tǒng)級(jí)配置參數(shù)(文件權(quán)限罢坝,環(huán)境變量等)廓握。多年來,這些也發(fā)展到自動(dòng)化整個(gè)流程嘁酿,包括代碼流和部署以及基礎(chǔ)架構(gòu)級(jí)別的資源協(xié)調(diào)隙券。

??? 容器化和編排:人們必須等待服務(wù)器引導(dǎo)以部署新版本代碼的日子已經(jīng)一去不復(fù)返了。 Docker等容器用于打包和擴(kuò)展特定服務(wù)闹司,并包含運(yùn)行它所需的一切娱仔。服務(wù)打包可以支持分段和生產(chǎn)之間所需的隔離,并與Kubernetes等編排工具一起游桩,可以幫助自動(dòng)化部署牲迫,同時(shí)降低在不同環(huán)境中移動(dòng)代碼時(shí)的風(fēng)險(xiǎn)。

現(xiàn)在我們已經(jīng)涵蓋了流水線的所有階段借卧,讓我們看看項(xiàng)目實(shí)踐案例盹憎。

流水線使用步驟


1.檢出代碼(GetCode)

目前代碼管理主要使用Gitlab和SVN,通過Jenkins獲取項(xiàng)目代碼庫信息(代碼庫類型铐刘、地址陪每、標(biāo)簽、分支)檢出源代碼镰吵。

2.代碼掃描(CodeScan)

對(duì)接SonarQube做代碼的質(zhì)量檢測(cè)檩禾,SkipSonar參數(shù)為false時(shí),由Sonar-Scanner實(shí)現(xiàn)代碼掃描疤祭。

3.構(gòu)建(Build)

構(gòu)建是一個(gè)打包的過程锌订,常用的打包工具有Maven、Ant画株、Gradle辆飘、Npm啦辐。通過Jekins獲取項(xiàng)目類型執(zhí)行Mvn/Gradle/Ant/Npm打包構(gòu)建,構(gòu)建成功后jar包可以上傳到Nexus制品倉庫蜈项。

4.單元測(cè)試(Test)

根據(jù)編寫的測(cè)試用例完成測(cè)試芹关,通常是以Mvn Test方式執(zhí)行。

5.發(fā)布(Deploy)

SkipDeploy參數(shù)為false的時(shí)候執(zhí)行發(fā)布紧卒,發(fā)布的應(yīng)用服務(wù)器可以是虛擬機(jī)或容器侥衬。

結(jié)論:自動(dòng)化提高工作效率

無論是推動(dòng)提交部署新版本還是在失敗后恢復(fù),自動(dòng)化流程都可以節(jié)省時(shí)間跑芳,保持質(zhì)量轴总,保持一致性,并允許研發(fā)團(tuán)隊(duì)加快和預(yù)測(cè)交付博个。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怀樟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盆佣,更是在濱河造成了極大的恐慌往堡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件共耍,死亡現(xiàn)場(chǎng)離奇詭異虑灰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痹兜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門穆咐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人字旭,你說我怎么就攤上這事对湃。” “怎么了谐算?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵熟尉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我洲脂,道長(zhǎng)斤儿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任恐锦,我火速辦了婚禮往果,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘一铅。我一直安慰自己陕贮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布潘飘。 她就那樣靜靜地躺著肮之,像睡著了一般掉缺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戈擒,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天眶明,我揣著相機(jī)與錄音,去河邊找鬼筐高。 笑死搜囱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柑土。 我是一名探鬼主播蜀肘,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼稽屏!你這毒婦竟也來了扮宠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤诫欠,失蹤者是張志新(化名)和其女友劉穎涵卵,沒想到半個(gè)月后浴栽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荒叼,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年典鸡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了被廓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萝玷,死狀恐怖嫁乘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情球碉,我是刑警寧澤蜓斧,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站睁冬,受9級(jí)特大地震影響挎春,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豆拨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一直奋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧施禾,春花似錦脚线、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渠旁。三九已至,卻和暖如春船逮,著一層夾襖步出監(jiān)牢的瞬間一死,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工傻唾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留投慈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓冠骄,卻偏偏與公主長(zhǎng)得像伪煤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凛辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容