下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)持續(xù)集成之“自動(dòng)化部署”持續(xù)集成之“自動(dòng)化部署”
發(fā)表于:2023-12-21來(lái)源:InfoQ:?jiǎn)塘狐c(diǎn)擊數(shù):標(biāo)簽:持續(xù)集成
在前文《依賴管理》中,我們討論了如何在代碼變得龐大,組件增多的情況下,做好外部庫(kù)和內(nèi)部組件依賴管理,從而提高構(gòu)建效率。可以應(yīng)用的實(shí)踐包括:
在前文《依賴管理》中,我們討論了如何在代碼變得龐大,組件增多的情況下,做好外部庫(kù)和內(nèi)部組件依賴管理,從而提高構(gòu)建效率。可以應(yīng)用的實(shí)踐包括:一次生成,多次復(fù)用;建立統(tǒng)一制品庫(kù),外部依賴庫(kù)可以使用像Maven或Ivy這樣的工具進(jìn)行統(tǒng)一管理;對(duì)架構(gòu)進(jìn)行調(diào)整,使一個(gè)大的代碼庫(kù)分成多個(gè)組件;每個(gè)組件有自己的持續(xù)集成體系;對(duì)多個(gè)組件做持續(xù)集成。然而,解決一個(gè)問(wèn)題后,總會(huì)有另一個(gè)問(wèn)題等在那里,需要你來(lái)解決。這次Joe的團(tuán)隊(duì)遇到了部署問(wèn)題。
星期一早上,Alice一進(jìn)辦公室,就看到一臉倦意的Joe坐在椅子上,喝著咖啡。
"今天怎么來(lái)得這么早?看樣子,你沒(méi)睡好啊?'Alice問(wèn)道。
"當(dāng)然啦,昨天晚上我就來(lái)了。'Joe無(wú)精打采地回答道。
"怎么啦?'
"還不是因?yàn)樾掳姹旧暇€出了點(diǎn)兒?jiǎn)栴}',Joe說(shuō)道。"看來(lái)我們要把部署這件事好好討論一下,再這樣下去,不只我要來(lái),你們也要和我一樣啦!呵呵!'
當(dāng)天下午,Joe邀請(qǐng)了運(yùn)維團(tuán)隊(duì)的主要負(fù)責(zé)人Tom和Steven,召開了一個(gè)關(guān)于部署問(wèn)題的討論會(huì)。
Joe說(shuō)道:"先請(qǐng)運(yùn)維部門的Tom介紹一下上周末的新版本上線過(guò)程和發(fā)現(xiàn)的問(wèn)題吧。'
Tom描述了上線部署全過(guò)程。
不可重復(fù)且不可靠、易出錯(cuò)的手工部署過(guò)程
當(dāng)新版本(開發(fā))(測(cè)試)完成后,由(開發(fā))團(tuán)隊(duì)的成員在瀏覽器上登錄運(yùn)維平臺(tái),填寫上線申請(qǐng)單。申請(qǐng)單的內(nèi)容包括新版本的上線部署步驟。
(測(cè)試人員)為了保證能夠升級(jí)部署成功,首先要復(fù)制生產(chǎn)環(huán)境中的程序和數(shù)據(jù)到本地的測(cè)試環(huán)境中,然后根據(jù)上線申請(qǐng)單中所描述的上線部署步驟進(jìn)行操作,對(duì)上線步驟進(jìn)行驗(yàn)證。
運(yùn)維人員登錄到運(yùn)維平臺(tái),收到上線申請(qǐng)單后,確認(rèn)"已收到'。
運(yùn)維人員發(fā)現(xiàn)上線部署步驟有問(wèn)題,生產(chǎn)環(huán)境的路徑與上線部署步驟中描述的不一致。于是與開發(fā)人員進(jìn)行溝通,讓開發(fā)人員修改上線部署步驟。
開發(fā)人員修改后,再次通知測(cè)試人員和運(yùn)維人員查看并確認(rèn)。
確認(rèn)無(wú)誤后,運(yùn)維人員根據(jù)部署計(jì)劃,登錄到生產(chǎn)環(huán)境中,依照上線部署步驟,手工操作完成。
"上周末上線部署時(shí)出現(xiàn)的情況是:在本次部署之前,我們的集群中,有兩臺(tái)機(jī)器因HotFix,其程序配置被修改過(guò),與其它機(jī)器不一致。因此,該機(jī)器上的部署失敗,導(dǎo)致部分服務(wù)不可用。運(yùn)維人員查了很長(zhǎng)時(shí)間沒(méi)有發(fā)現(xiàn)問(wèn)題,星期日打電話把Joe叫來(lái)幫助我們查問(wèn)題時(shí),Joe才回憶起有那么一次HotFix,但當(dāng)時(shí)負(fù)責(zé)的運(yùn)維人員已經(jīng)離職,沒(méi)人其它運(yùn)維人員知道這件事情。'Tom說(shuō)道,"我們對(duì)問(wèn)題進(jìn)行了分析,認(rèn)為應(yīng)該加強(qiáng)我們的上線流程管理,對(duì)于那種HotFix也應(yīng)該發(fā)起一個(gè)審批流程,并且在該流程中不但要主要負(fù)責(zé)人審批,而且要對(duì)相關(guān)人發(fā)出周知通報(bào)。另外,我們的運(yùn)維人員應(yīng)該對(duì)上線單進(jìn)行嚴(yán)格審核,并對(duì)部署中所涉及的機(jī)器進(jìn)行更詳細(xì)的驗(yàn)證,對(duì)生產(chǎn)環(huán)境中的任何修改都要進(jìn)行登記。即使非常緊急,也要在事后補(bǔ)充記錄一下。'
"這些方法固然很好,但其實(shí)我們可以采用更好的辦法來(lái)解決。'Joe接著說(shuō)到,"假如我們?cè)诓渴疬\(yùn)維工作也能夠借鑒持續(xù)集成的做法,利用一些最佳實(shí)踐,那么這次部署事故根本就不會(huì)發(fā)生。比如(1)將部署操作腳本化;(2)進(jìn)行持續(xù)部署驗(yàn)證測(cè)試;(3)部署腳本通用化,環(huán)境變量等使用配置方式傳入;(4)讓測(cè)試環(huán)境盡可能與生產(chǎn)環(huán)境一致,至少在成本條件允許的情況下盡量保持相似;(5)對(duì)環(huán)境配置進(jìn)行版本控制;(6)任何人不得直接對(duì)生產(chǎn)環(huán)境進(jìn)行直接的手工操作,等等。'
將部署操作腳本化,并進(jìn)行部署驗(yàn)證測(cè)試
Bob說(shuō)道:"嗯,其實(shí)那些上線步驟中所描述的內(nèi)容都可以進(jìn)行腳本化,之前也討論過(guò)這一問(wèn)題。目前上線步驟中的內(nèi)容基本都可以寫成(自動(dòng)化)腳本,即使現(xiàn)在不行,也可以通過(guò)少量改造,使其可以(自動(dòng)化)。但問(wèn)題是......'Bob猶豫了一下,接著說(shuō)道,"如何來(lái)驗(yàn)證這些腳本是正確的呢?'
Joe說(shuō)道:"保證運(yùn)維人員是如何驗(yàn)證上線申請(qǐng)單上的上線步驟是正確的呢?同樣,我們也可以做一些部署驗(yàn)證就行了。這些部署的驗(yàn)證也可以通過(guò)腳本方式來(lái)進(jìn)行,比如在安裝之前驗(yàn)證程序所用端口沒(méi)有被占用,安裝之后驗(yàn)證該端口已被該程序所使用;比如安裝之前驗(yàn)證程序日志中記錄了該程序已停止運(yùn)行,在安裝之后驗(yàn)證程序日志中刻錄該程序已重新啟動(dòng);等等'。
Alice問(wèn)道:"那我們還要調(diào)試這些部署腳本呀?沒(méi)有線上生產(chǎn)環(huán)境,我們?cè)趺凑{(diào)試呢?'
各類環(huán)境盡可能相似,并使部署腳本通用化
Joe回答道:"首先我們應(yīng)該加強(qiáng)基礎(chǔ)設(shè)施這方面的投入。在力所能及的情況下,讓測(cè)試環(huán)境與生產(chǎn)環(huán)境相似。比如,生產(chǎn)環(huán)境可能有100臺(tái)機(jī)器的集群,那我們至少要找兩臺(tái)機(jī)器的集群做測(cè)試環(huán)境。生產(chǎn)環(huán)境中使用Tomcat,我們的測(cè)試環(huán)境和開發(fā)環(huán)境中也應(yīng)該使用相同的Tomcat,而不用Jetty。'
Joe停下來(lái),喝了一口咖啡,接著說(shuō)道:"這樣一來(lái),我們的部署腳本就可以在開發(fā)環(huán)境、測(cè)試環(huán)境進(jìn)行測(cè)試了。當(dāng)開發(fā)人員進(jìn)行本地測(cè)試時(shí),可以使用這個(gè)腳本進(jìn)行單機(jī)的部署。當(dāng)測(cè)試人員進(jìn)行集成測(cè)試時(shí),可以使用同樣的腳本進(jìn)行多機(jī)部署。與機(jī)器數(shù)量無(wú)關(guān)的配置可以統(tǒng)一放在某配置文件中。而與機(jī)器數(shù)量等相關(guān)的配置可以放在另外的配置文件中。由于在真正上線部署之前,開發(fā)人員和測(cè)試人員已經(jīng)使用同一個(gè)腳本進(jìn)行多次部署,就是對(duì)該腳本進(jìn)行的測(cè)試。當(dāng)我們上線部署時(shí),只有與機(jī)器相關(guān)的配置文件會(huì)有變化,其它配置基本相同,所以上線部署時(shí)腳本出錯(cuò)的幾率已經(jīng)比較小了。而且,這種自動(dòng)化沒(méi)有人工干預(yù),也不會(huì)發(fā)生手工誤操作。'
Tom問(wèn)道:"那這些腳本由誰(shuí)來(lái)寫?由誰(shuí)維護(hù)呢?'
Joe回答道:"誰(shuí)最了解情況,就由誰(shuí)來(lái)寫。其實(shí),我們也應(yīng)該像對(duì)待產(chǎn)品代碼一樣,來(lái)對(duì)待這些腳本和配置文件,把它們放在我們的代碼庫(kù)里,進(jìn)行版本控制。無(wú)論是運(yùn)維人員還是開發(fā)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度交通安全免責(zé)協(xié)議書:交通安全責(zé)任劃分3篇
- 二零二五年度民辦學(xué)校辦學(xué)許可證轉(zhuǎn)讓及教學(xué)資源共享合同3篇
- 2025年度公司單位員工帶薪年假與人事合同實(shí)施細(xì)則3篇
- 二零二五年度養(yǎng)殖場(chǎng)租賃與飼料原料采購(gòu)合作協(xié)議2篇
- 二零二五年度農(nóng)機(jī)租賃與農(nóng)產(chǎn)品深加工合作合同3篇
- 2025年度勞動(dòng)合同解除通知及離職證明模板3篇
- 二零二五年度股東退出與公司社會(huì)責(zé)任履行協(xié)議2篇
- 2025年度農(nóng)村保潔員服務(wù)區(qū)域及質(zhì)量合同
- 2025年度城市綠化石子供應(yīng)及養(yǎng)護(hù)服務(wù)合同3篇
- 2025年度年度高風(fēng)險(xiǎn)戶外活動(dòng)意外事故免責(zé)協(xié)議3篇
- 應(yīng)急預(yù)案監(jiān)理實(shí)施細(xì)則
- 基于英語(yǔ)學(xué)習(xí)活動(dòng)觀的高中英語(yǔ)課堂教學(xué)實(shí)踐
- 焊工職業(yè)技能鑒定考試題庫(kù)及答案
- 2024年4月自考00159高級(jí)財(cái)務(wù)會(huì)計(jì)試題
- MOOC 工程材料學(xué)-華中科技大學(xué) 中國(guó)大學(xué)慕課答案
- 論蘇軾詩(shī)詞中的曠達(dá)風(fēng)格
- 網(wǎng)上信訪業(yè)務(wù)培訓(xùn)課件
- 小學(xué)語(yǔ)文中段整本書閱讀的指導(dǎo)策略研究 中期報(bào)告
- 魚塘改造預(yù)算方案
- 初二上冊(cè)歷史總復(fù)習(xí)知識(shí)點(diǎn)考點(diǎn)總結(jié)(浙教版)
- 峨眉山月歌-李白
評(píng)論
0/150
提交評(píng)論