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