上一課時我主要介紹了實現(xiàn)自動化測試的范圍、流程和結(jié)構(gòu)圖,自動化測試是持續(xù)集成實踐不可或缺的一部分,從而使得軟件向高效率和高質(zhì)量邁進了一大步。持續(xù)集成主要關(guān)注的是代碼是否可以編譯成功、是否可以通過單元測試和驗收測試等。但持續(xù)集成并不能實現(xiàn)軟件包向測試環(huán)境和生產(chǎn)環(huán)境部署的要求。如果軟件包不能很快的部署到測試環(huán)境和類生產(chǎn)環(huán)境,就導(dǎo)致開發(fā)人員不能及時的收到反饋,就會使軟件存在更多的缺陷。今天介紹的內(nèi)容——部署流水線,就是搭建一套從開發(fā)到測試,到運維的流水線,能夠?qū)崿F(xiàn)一鍵式的將軟件部署到生產(chǎn)環(huán)境。
什么是部署流水線?
軟件開發(fā)過程是一個將客戶或用戶的想法變成一個真實可用的特性的過程。部署流水線是這個過程中的一部分,是指軟件從版本控制庫到用戶手中這一過程自動化的展現(xiàn)形式。這一過程包括編譯構(gòu)建、代碼檢查、上傳制品庫、測試和部署等,并且這些階段的執(zhí)行都應(yīng)該是自動執(zhí)行的。自動化帶來的好處是這個流程變得更快、可重復(fù)且更加可靠。
部署流水線主要包含下面幾個階段:
& 提交階段,代碼提交后會運行代碼編譯、自動化單元測試以及對代碼進行動靜態(tài)掃描;
& 自動化測試階段,主要是從功能性和非功能性方面驗證系統(tǒng)是否可用,并且滿足用戶需求;
& 手工測試階段,主要是用戶驗收測試,用于驗證系統(tǒng)是否為用戶提供了價值;
**發(fā)布階段,**將軟件交付給用戶,交付方式有多種,可以是獨立部署的方式,也可以是 SaaS 服務(wù)的方式。
部署流水線包含的很多階段我們之前的課程都有提到,比如提交檢查、自動化測試等,和部署相關(guān)的內(nèi)容涉及較少,這部分內(nèi)容是本課時的一個重點。
部署流水線相關(guān)實踐
為了更好地發(fā)揮部署流水線的作用,在實施部署流水線的時候要遵循以下幾個準則:
一包到底
一包到底是之前課時的內(nèi)容,就是將軟件從源代碼編譯構(gòu)建出一個部署包,在后續(xù)的流程中都統(tǒng)一使用這一個部署包。這樣做的好處有以下兩點。
& 減少了編譯時間:每次編譯都需要花費時間,并且占用編譯機的資源,如果代碼庫比較大重復(fù)編譯將是一場災(zāi)難。
& 保證部署包的一致性:因為在各個階級進行測試的部署包都是同一個,這樣可以保證部署到生產(chǎn)環(huán)境中的部署包與前面測試階段驗證過的部署包是完全一樣的。
那么如何保證每次部署的包都是同一個呢?在之前的流水線中,每次生成部署包的同時也會生成一個 md5 值,并在后續(xù)每次部署時利用這個 md5 值對部署包進行驗證。這也是大多數(shù)企業(yè)中部署時采用的一種方法。
另外,對于每次構(gòu)建出的部署包都需要存放到專門的制品庫中,如 Jfrog Artifactory。這一步驟可以集成到持續(xù)集成流水線中,上傳制品庫時同時也會攜帶該部署包的屬性,如:代碼庫、版本號、CommitId。Jfrog Artifactory 支持對制品打標簽,可以在后續(xù)的測試階段將測試結(jié)果以標簽的形式打到制品上,作為是否進階到下一個階段的判斷條件。
相同的部署方式
使用相同的流水線、相同的部署方式部署任意一套環(huán)境,包括生產(chǎn)環(huán)境! 這樣既能對構(gòu)建和部署流程進行有效測試,提高部署流水線的穩(wěn)定性和健壯性。又能保證不同環(huán)境的部署過程是一致的。當部署的服務(wù)出現(xiàn)問題時,可以排除部署腳本導(dǎo)致的因素。
實際情況中,每套環(huán)境有很多不同之處,比如機器的 IP 會不同,操作系統(tǒng)和中間件的配置不同等。不同的環(huán)境信息并不意味著就要為每套環(huán)境都準備一套部署腳本,我們可以采用將部署腳本與配置信息分離的方法。在之前的“環(huán)境管理”課時中提到,將部署腳本作為模板存儲在 Git 代碼庫中,將每個環(huán)境不同的配置信息存儲在 CMDB 中,就能實現(xiàn)通過一套部署腳本部署所有環(huán)境。
采用相同的部署方式是降低發(fā)布風(fēng)險的方法之一。因為不管是測試環(huán)境、還是生產(chǎn)環(huán)境都是相同的部署方式,在向生產(chǎn)環(huán)境部署之前,已經(jīng)在測試環(huán)境部署了 n 次了,部署腳本已經(jīng)非常健壯,能夠大大降低向生產(chǎn)環(huán)境部署的風(fēng)險。
對部署冒煙測試
在應(yīng)用程序部署完成后,應(yīng)該有相應(yīng)的腳本對應(yīng)用程序進行冒煙測試,以確保應(yīng)用程序啟動并運行了。這個測試可以很簡單,比如調(diào)用接口檢查是否能正常返回。如果要檢查依賴的服務(wù),比如數(shù)據(jù)庫和緩存服務(wù)等,可以調(diào)用從依賴服務(wù)獲取數(shù)據(jù)的接口,結(jié)果可以是空,只要能確保連接是正常的即可。
冒煙測試又稱為部署測試,它是環(huán)境部署完成并交付使用的有效驗證方法。如果服務(wù)不可用,也能知道是什么原因?qū)е碌牟豢捎茫菏欠?wù)本身還是依賴服務(wù)?這對排除應(yīng)用程序無法正常運行問題也很有幫助。
如何實現(xiàn)部署流水線
下面介紹一下如何實現(xiàn)部署流水線。下圖是部署流水線的結(jié)構(gòu)圖,該圖也反映了真實的軟件交付過程。起點是開發(fā)人員將代碼提交到版本控制系統(tǒng)中,終點是將軟件部署到生產(chǎn)環(huán)境交付給用戶。在上面介紹的部署流水線的相關(guān)實踐,在該圖中都有所體現(xiàn)。
& 版本控制系統(tǒng)和制品庫是源代碼和制品的單一可信數(shù)據(jù)源。制品庫中的部署包只能通過版本控制系統(tǒng)中的源代碼編譯構(gòu)建產(chǎn)出,并上傳到制品庫。后面測試環(huán)境和生產(chǎn)環(huán)境需要的部署包都來自同一個制品庫,保證了部署包的唯一性。
& 測試環(huán)境和生產(chǎn)環(huán)境都是通過部署平臺統(tǒng)一部署,測試環(huán)境可以由測試人員自服務(wù)部署,生產(chǎn)環(huán)境可以由運維人員一鍵部署。
& 不管是測試環(huán)境還是生產(chǎn)環(huán)境,當軟件部署完成后,通過冒煙測試驗證服務(wù)是否正常啟動。
部署流水線中的很多階段在之前的課時中都有涉及,提交階段的編譯打包、代碼掃描、自動化測試、環(huán)境管理等,這里就不做太多闡述。我主要介紹一下自動化部署和發(fā)布到生產(chǎn)環(huán)境相關(guān)的內(nèi)容。如下圖所示,自動化部署平臺提供一鍵部署的功能。用戶只需要選擇在哪個環(huán)境、使用哪個軟件版本,采用什么樣的部署策略即可。
自動化部署平臺
自動化部署平臺是部署流水線中的重要組件,通過封裝統(tǒng)一的部署流程,提供易用的用戶界面,對外提供統(tǒng)一的軟件部署的能力。部署平臺提供一套部署腳本,屏蔽測試環(huán)境和生產(chǎn)環(huán)境的差異。在進行自動化部署時,只需要提供部署的軟件版本以及要部署的目標環(huán)境,采用什么樣的部署策略(只對生產(chǎn)環(huán)境有效),點擊“開始”按鈕,所有的部署過程都是自動化的。
關(guān)于“部署軟件”和“發(fā)布軟件”,很多人認為它們是一樣的,他們的區(qū)別在于 “發(fā)布”是一個業(yè)務(wù)行為。部署軟件是將軟件部署到生產(chǎn)環(huán)境中,但部署的服務(wù)是否發(fā)布給用戶是由業(yè)務(wù)決定的。目前很多企業(yè)中,部署和發(fā)布是相等的,軟件部署到生產(chǎn)環(huán)境就直接發(fā)布給用戶使用了。但有些功能這樣做會有問題,特別是跟時間、位置相關(guān)的功能。比如促銷活動,只能在固定的時間范圍內(nèi)有效。只不過目前的發(fā)布并不是由業(yè)務(wù)人員手動點擊發(fā)布按鈕觸發(fā),而是由程序自動化的觸發(fā)。
部署策略
部署策略是針對生產(chǎn)環(huán)境的,因為生產(chǎn)環(huán)境是用戶使用的真實環(huán)境,部署失敗可能會對用戶造成嚴重影響。因此,在部署生產(chǎn)環(huán)境時要采取低風(fēng)險、零停機的部署方式。目前常用的方式有藍綠部署、金絲雀發(fā)布和特性開關(guān)等方式。
& 藍綠部署:藍綠部署是指有兩套相同的生產(chǎn)環(huán)境,一套叫藍環(huán)境,一套叫綠環(huán)境。如上圖中兩種不同的顏色。假如當前用戶正在使用作為生產(chǎn)環(huán)境的藍環(huán)境。如果要發(fā)布一個新版本,先把該版本發(fā)布到綠環(huán)境中,并在綠環(huán)境中進行冒煙測試來檢查服務(wù)是否可以正常工作。當一切準備就緒后,將用戶引導(dǎo)到綠環(huán)境即可完成新版本的升級。如果此時出現(xiàn)問題,再將用戶切換回之前的藍環(huán)境即可完成回滾。這樣不會對用戶造成太大的影響。
& 金絲雀發(fā)布:金絲雀發(fā)布是指將新版本的服務(wù)部署到生產(chǎn)環(huán)境的一部分服務(wù)器中,如上圖所示。通過一小撮用戶試用的方式,可以快速得到反饋,及時的發(fā)現(xiàn)新版本中存在的問題,而不會影響大部分用戶。如果新版本出現(xiàn)問題,只要不把流量引導(dǎo)到有問題的新版本上就行。另外,金絲雀發(fā)布的方式可以用來做 A/B 測試,將一部分用戶引導(dǎo)至新版本和舊版本上,分別分析不同版本對用戶、收入等指標的差異。
& 特性開關(guān):特性開關(guān)是一種輕松開啟和關(guān)閉功能的方式。當軟件部署到生產(chǎn)環(huán)境中,此時該功能并未對用戶開放,只有通過特性開關(guān)啟用該功能時,用戶才能使用該功能。如果此時發(fā)現(xiàn)問題,只需要將開關(guān)關(guān)閉即可。特性開關(guān)實現(xiàn)也比較簡單,可以在代碼中通過 if-else 的方式控制代碼執(zhí)行的路徑。
總結(jié)文章來源:http://www.zghlxwxcb.cn/news/detail-835048.html
本課時介紹了使用部署流水線實現(xiàn)一鍵部署軟件到測試環(huán)境及生產(chǎn)環(huán)境,通過自動化的方式完成軟件部署的最后一公里。部署流水線并不是指用于部署,而是從代碼提交到代碼庫到最終部署到生產(chǎn)環(huán)境的整個過程,包含了前面提到的代碼掃描、自動化測試和環(huán)境管理等階段。為了更好地實施部署流水線,介紹了幾個關(guān)鍵的實踐以及通過自動化部署平臺完成部署這個階段的操作,最后介紹了零停機發(fā)布到生產(chǎn)環(huán)境的幾種部署策略,實現(xiàn)低風(fēng)險發(fā)布。部署流水線是 CICD 的重要組成部分,也是實現(xiàn)持續(xù)部署的重要環(huán)節(jié)。這一部分在企業(yè)里一般屬于運維側(cè)平臺,隨著 DevOps 的普及,開發(fā)和運維的界限越來越模糊,開發(fā)人員可以利用運維開發(fā)的部署平臺自服務(wù),根據(jù)業(yè)務(wù)需求隨時發(fā)布軟件到生產(chǎn)環(huán)境。文章來源地址http://www.zghlxwxcb.cn/news/detail-835048.html
到了這里,關(guān)于DevOps落地筆記-14|部署流水線:打造一站式部署的關(guān)鍵平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!