持續(xù)集成和持續(xù)交付
云計(jì)算團(tuán)隊(duì) 2020-03-16
在DevOps最佳實(shí)踐里面分為了研發(fā)管理,持續(xù)交付和技術(shù)運(yùn)營幾個(gè)關(guān)鍵的過程域。但是在實(shí)踐的過程中,最容易出現(xiàn)問題的不是單個(gè)技術(shù)點(diǎn),而是跨域的協(xié)同問題,或者說研發(fā)過程管理和持續(xù)集成交付本身就是密不可分的兩個(gè)部分,我們只是為了容易理解和學(xué)習(xí)將其劃分為了不同的過程域而已。
任何一次新的編譯構(gòu)建部署完成后都涉及到測(cè)試人員測(cè)試,測(cè)試人員測(cè)試出問題后又會(huì)提交Bug,開發(fā)人員修改Bug后檢入代碼,等待下一次打包部署以形成多次迭代。整個(gè)過程最好方式就是要盡量減少大量的人工溝通協(xié)同,而是應(yīng)該通過工具鏈協(xié)同來完成。
對(duì)于傳統(tǒng)的持續(xù)集成,一般最佳實(shí)踐為每天晚上進(jìn)行自動(dòng)化構(gòu)建和冒煙測(cè)試,而對(duì)于當(dāng)期的DevOps過程,在設(shè)計(jì)完流水線后,可以手工去啟動(dòng)流水線作業(yè),也可以自動(dòng)去執(zhí)行流水線,流水線執(zhí)行時(shí)間頻度也可以進(jìn)一步縮短,假設(shè)我們每2個(gè)小時(shí)自動(dòng)化的執(zhí)行一次流水線作業(yè),我們以此場(chǎng)景來做進(jìn)一步梳理。
流水線增加啟動(dòng)檢查節(jié)點(diǎn)-雖然2小時(shí)執(zhí)行一次流水線,但是在執(zhí)行前先進(jìn)行啟動(dòng)前檢查,如果在最近2個(gè)小時(shí)內(nèi)沒有新代碼check in,那么不執(zhí)行流水線。其次,如果上一次流水線執(zhí)行實(shí)例還處于待處理或未關(guān)閉狀態(tài)的時(shí)候,同樣也不執(zhí)行流水線作業(yè)而直接跳過。
是否需要人工驗(yàn)證:流水線打包部署包括兩個(gè)方面,一個(gè)是新功能提交或新bug解決,只有這種情況才需要人工驗(yàn)證。因此一次流水線執(zhí)行如果沒有新需求或Bug狀態(tài)變化,那么應(yīng)該直接跳過人工驗(yàn)證節(jié)點(diǎn)并關(guān)閉。反之,則應(yīng)該跳轉(zhuǎn)到待人工驗(yàn)證環(huán)節(jié)。
需求和缺陷的管理:注意新需求和新缺陷都應(yīng)該提交,都有狀態(tài),需求細(xì)分到具體的需求功能點(diǎn),同時(shí)測(cè)試人員提交的缺陷應(yīng)該對(duì)應(yīng)到具體的需求功能點(diǎn)上面。一個(gè)需求開發(fā)完成后,需求本身也到待驗(yàn)證狀態(tài),但是一個(gè)待驗(yàn)證的需求是否能夠關(guān)閉則必須是改需求下面所有的bug都解決完成后才能夠關(guān)閉。
需求和缺陷狀態(tài)的變化:開發(fā)人員首先是將需求或缺陷完成,并在本機(jī)進(jìn)行自測(cè)通過,然后將代碼check in到配置管理庫。同時(shí)手工將需求或缺陷狀態(tài)處理到待部署狀態(tài)。在流水線啟動(dòng)后,如果整個(gè)構(gòu)建打包和部署成功,則在成功完成應(yīng)用部署后,將待部署狀態(tài)的需求或bug轉(zhuǎn)到待驗(yàn)證狀態(tài)。在部署完成后測(cè)試人員可以看到待驗(yàn)證的bug或需求,那么他進(jìn)入當(dāng)前的測(cè)試環(huán)境一定是最新的可以進(jìn)行缺陷驗(yàn)證的環(huán)境。
應(yīng)用部署和環(huán)境遷移:如何理清這兩者的關(guān)系,包括在流水線節(jié)點(diǎn)設(shè)計(jì)的時(shí)候是同種類型的一個(gè)節(jié)點(diǎn)還是不同的兩個(gè)節(jié)點(diǎn)?對(duì)于應(yīng)用來說是直接將編譯打包后的鏡像執(zhí)行進(jìn)行部署,前面有編譯構(gòu)建操作;而對(duì)于環(huán)境遷移來說則是直接從制品庫里面使用已有鏡像進(jìn)行環(huán)境部署。
流水線模板和流水線實(shí)例應(yīng)該是兩個(gè)不同的概念,一個(gè)流水線模板每次運(yùn)行都會(huì)產(chǎn)生一個(gè)實(shí)例,而每次實(shí)例都會(huì)形成一次構(gòu)建版本號(hào)。即每次打包后形成的鏡像入庫也會(huì)附帶上這么一個(gè)流水線實(shí)例號(hào)。那么我們的應(yīng)用部署操作本身就簡(jiǎn)單的,對(duì)于應(yīng)用部署活動(dòng)節(jié)點(diǎn)編排在流水線上面,作用是進(jìn)行應(yīng)用部署,但是本質(zhì)是從制品庫拿到對(duì)應(yīng)鏡像去部署?如何拿到對(duì)應(yīng)鏡像,基于流水線實(shí)例號(hào)就可以很好的進(jìn)行對(duì)接上。
從SIT到UAT環(huán)境:在環(huán)境遷移中,我們?cè)O(shè)置兩個(gè)環(huán)境,一個(gè)SIT環(huán)境供內(nèi)部測(cè)試人員測(cè)試,一個(gè)UAT環(huán)境供客戶方進(jìn)行UAT測(cè)試,那么在SIT測(cè)試完成后可以將SIT環(huán)境的鏡像包遷移到UAT環(huán)境進(jìn)行部署。那么并不是每一次流水線作業(yè)都涉及到環(huán)境遷移操作,而實(shí)際上需要測(cè)試人員去判斷當(dāng)前的測(cè)試版本是否需要遷移到UAT環(huán)境去供用戶測(cè)試。同時(shí)測(cè)試人員在當(dāng)前測(cè)試問題全部修復(fù)并關(guān)閉后可以對(duì)當(dāng)前版本打配置基線操作。其次,對(duì)于用戶測(cè)試提交的問題一般并不會(huì)在我們自己的缺陷管理系統(tǒng)進(jìn)行Bug記錄,因此用戶反饋問題給測(cè)試人員,測(cè)試人員幫忙錄入到缺陷管理系統(tǒng),同時(shí)缺陷修改完成后測(cè)試先要驗(yàn)證沒有問題,再通知用戶進(jìn)行驗(yàn)證,只有用戶驗(yàn)證通過后缺陷才能夠最終關(guān)閉。