一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

持續(xù)集成之“自動(dòng)化部署”

  在前文《依賴管理》中,我們討論了如何在代碼變得龐大,組件增多的情況下,做好外部庫(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,召開(kāi)了一個(gè)關(guān)于部署問(wèn)題的討論會(huì)。

  Joe說(shuō)道:“先請(qǐng)運(yùn)維部門的Tom介紹一下上周末的新版本上線過(guò)程和發(fā)現(xiàn)的問(wèn)題吧。”

  Tom描述了上線部署全過(guò)程。

  不可重復(fù)且不可靠、易出錯(cuò)的手工部署過(guò)程

  1. 當(dāng)新版本開(kāi)發(fā)測(cè)試完成后,由開(kāi)發(fā)團(tuán)隊(duì)的成員在瀏覽器上登錄運(yùn)維平臺(tái),填寫上線申請(qǐng)單。申請(qǐng)單的內(nèi)容包括新版本的上線部署步驟。
  2. 測(cè)試人員為了保證能夠升級(jí)部署成功,首先要復(fù)制生產(chǎn)環(huán)境中的程序和數(shù)據(jù)到本地的測(cè)試環(huán)境中,然后根據(jù)上線申請(qǐng)單中所描述的上線部署步驟進(jìn)行操作,對(duì)上線步驟進(jìn)行驗(yàn)證。
  3. 運(yùn)維人員登錄到運(yùn)維平臺(tái),收到上線申請(qǐng)單后,確認(rèn)“已收到”。
  4. 運(yùn)維人員發(fā)現(xiàn)上線部署步驟有問(wèn)題,生產(chǎn)環(huán)境的路徑與上線部署步驟中描述的不一致。于是與開(kāi)發(fā)人員進(jìn)行溝通,讓開(kāi)發(fā)人員修改上線部署步驟。
  5. 開(kāi)發(fā)人員修改后,再次通知測(cè)試人員和運(yùn)維人員查看并確認(rèn)。
  6. 確認(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)境和開(kāi)發(fā)環(huán)境中也應(yīng)該使用相同的Tomcat,而不用Jetty。”

  Joe 停下來(lái),喝了一口咖啡,接著說(shuō)道:“這樣一來(lái),我們的部署腳本就可以在開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境進(jìn)行測(cè)試了。當(dāng)開(kāi)發(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)的配置可以放在另外的配置文件中。由于在真正上線部署之前,開(kāi)發(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)維人員還是開(kāi)發(fā)人員,或者測(cè)試人員,對(duì)這些腳本的修改都應(yīng)該提交到版本控制庫(kù)中,除非他所做的修改只是為了測(cè)試他自己在本地的程序,那就不用提交了。這樣一來(lái),‘誰(shuí)在什么時(shí)候?qū)κ裁催M(jìn)行了修改,為什么做修改?’這個(gè)審計(jì)問(wèn)題就可以直接由版本控制系統(tǒng)來(lái)回答,也就做到了所有內(nèi)容可追蹤了。”

  對(duì)環(huán)境管理進(jìn)行版本控制,杜絕對(duì)生產(chǎn)環(huán)境的手工直接修改

  “聽(tīng)上去,對(duì)于配置文件、腳本等進(jìn)行版本管理的確是解決了運(yùn)維部署的很多問(wèn)題。但如何對(duì)環(huán)境管理進(jìn)行版本控制呢?”Tom問(wèn)道。

  Joe想了想,說(shuō)道:“環(huán)境管理比較復(fù)雜。一般來(lái)說(shuō),環(huán)境包括幾個(gè)層次,包括硬件及網(wǎng)絡(luò)配置、操作系統(tǒng)、我們的應(yīng)用程序所依賴的軟件堆棧及其配置、以及我們的應(yīng)用程序運(yùn)行時(shí)所需的數(shù)據(jù)及其配置。目前對(duì)我們來(lái)說(shuō),對(duì)于硬件及網(wǎng)絡(luò)配置、操作系統(tǒng)這兩層來(lái)說(shuō),有兩種方式進(jìn)行管理。一種是利用一些專用軟件進(jìn)行自動(dòng)化的遠(yuǎn)程配置,即只要給機(jī)器加電,就可以通過(guò)一些技術(shù)對(duì)一臺(tái)機(jī)器進(jìn)行系統(tǒng)的安裝與配置。另一種是使用虛擬化技術(shù)來(lái)進(jìn)行系統(tǒng)配置管理。對(duì)我們現(xiàn)在的游戲平臺(tái)來(lái)說(shuō), 使用后者即可。只要將基本的環(huán)境做成虛擬機(jī)鏡像文件,并將其作為環(huán)境基線進(jìn)行版本管理。當(dāng)然,由于鏡像通常較大,所以最好不要使用常見(jiàn)的版本控制工具(如subversion,Git等)進(jìn)行,而使用某種簡(jiǎn)單的機(jī)制即可。”

  Joe停了一下,看看大家沒(méi)有提問(wèn)的意思,于是接著說(shuō)道:“至于基于其上的軟件堆棧及堆棧中各軟件的配置管理完全可以利用類似于CfEngine,Puppet或Chef的工具進(jìn)行。這些軟件環(huán)境管理工具都提供某種領(lǐng)域?qū)僬Z(yǔ)言來(lái)描述軟件堆棧配置,并保存在文本文件中。這些工具一般通過(guò)服務(wù)器/客戶端的工作方式運(yùn)行,客戶端向服務(wù)器發(fā)送請(qǐng)求,驗(yàn)證本機(jī)器節(jié)點(diǎn)的軟件配置是否與服務(wù)器中的設(shè)置相符,如果不符,就會(huì)自動(dòng)更新。尤其重要的是,這些更新操作都是冪等的,即無(wú)論這些配置在該客戶機(jī)上執(zhí)行多少遍,每次的結(jié)果狀態(tài)都是相同的。另外,它們通常能與版本控制工具集成。所以,只要將我們的軟件堆棧配置管理信息放到版本控制庫(kù)中,就可以同時(shí)管理數(shù)臺(tái)機(jī)器。”

  “oh, 對(duì)不起,Joe,我想打斷一下,”Tom問(wèn)道:“你能畫一個(gè)圖來(lái)解釋一下你剛才所說(shuō)的這種軟件環(huán)境配置管理工具嗎?”

  “當(dāng)然沒(méi)問(wèn)題。”Joe拿起筆在白板上畫了一個(gè)Puppet的工作示意圖,如下圖所示。

  “看上去清楚多啦。”Tom笑道,“通過(guò)這種方式,我們就只需要將版本控制庫(kù)中保存的配置信息簽出到本地,進(jìn)行相應(yīng)的修改,再提交到版本控制庫(kù)中,這種工具就會(huì)自動(dòng)幫我們完成必要的配置更新了。是這樣的嗎?”

  “對(duì),”Joe點(diǎn)了點(diǎn)頭,說(shuō)道,“如果我們的部署腳本也是通過(guò)這種方式來(lái)做的,那么我們就根本沒(méi)有必要登錄到生產(chǎn)環(huán)境的機(jī)器上,進(jìn)行手工操作了。而且,Puppet還提供一種Try Run功能,可以進(jìn)行配置變更的模擬,讓你能夠?qū)Ρ纫幌伦兏昂蟮牟煌帯?rdquo;

  Tom說(shuō)道:“你說(shuō)的這些聽(tīng)上去都不錯(cuò)。但并不是所有人都能夠修改生產(chǎn)環(huán)境的配置信息的。所以我們還是需要一個(gè)軟件平臺(tái)來(lái)管理上線的申請(qǐng)審批流程。”

  “在任何企業(yè)中,這種申請(qǐng)審批流程和生產(chǎn)環(huán)境變更的授權(quán)都是必要的,但這僅僅是審核流程的操作。而真正與軟件部署相同的具體操作都不應(yīng)該在這種審批流程當(dāng)中。”Joe回答道。

  Tom接過(guò)話來(lái),說(shuō)道:“嗯,這樣的話,我們?nèi)耘f能夠做到:有權(quán)限的人才能真正修改生產(chǎn)環(huán)境的配置文件,同時(shí)達(dá)到了無(wú)人真正直接操作生產(chǎn)環(huán)境的目的,避免了手工誤操作帶來(lái)的問(wèn)題。”

  參加本次會(huì)議的測(cè)試人員和運(yùn)維人員對(duì)這種做法產(chǎn)生了濃厚的興趣,并要求開(kāi)發(fā)人員給予配合,將目前游戲平臺(tái)的部署自動(dòng)化。Tom說(shuō)道:“這就是我們運(yùn)維工作的一個(gè)方向。讓枯燥易出錯(cuò)的重復(fù)性手工操作變成受控的自動(dòng)化,從而解放運(yùn)維人員,讓我們可以關(guān)注于更加有價(jià)值的運(yùn)行監(jiān)控等工作中。”

  Alice說(shuō)道:“這看上去還是有一定的工作量啊。”

  “當(dāng)然,我們可能需要做一些工作,但我想這些投入是值得的。”Joe回答道。“同時(shí),還需要各種角色之間更緊密的配合,而不是像之前那樣,通過(guò)一個(gè)代表上個(gè)世紀(jì)八十年代先進(jìn)技術(shù)的辦公自動(dòng)化平臺(tái)來(lái)描述部署上線步驟這類關(guān)鍵的業(yè)務(wù)操作信息。”

  Tom也點(diǎn)了點(diǎn)頭,說(shuō):“嗯,應(yīng)該使用版本控制方式。但我們還是需要一個(gè)上線審批的流程,只不過(guò),這個(gè)流程中不再保存上線步驟這類與實(shí)際部署相關(guān)的業(yè)務(wù)信息,而只是為了部署人員的資格審核與信息周知的目標(biāo)。”

  經(jīng)過(guò)一番討論,開(kāi)發(fā)、測(cè)試和運(yùn)維團(tuán)隊(duì)在這件事情上達(dá)成了一致,并按計(jì)劃開(kāi)始實(shí)施了。

  需要注意的是,他們似乎沒(méi)有談到數(shù)據(jù)管理。他們會(huì)遇到相關(guān)的問(wèn)題嗎??

it知識(shí)庫(kù)持續(xù)集成之“自動(dòng)化部署”,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久婷婷| 欧美亚洲国产精品第一页 | 精品国产91乱码一区二区三区 | 色综合图片二区150p | 夜色55夜色66亚洲精品网站 | 四虎影视永久免费视频观看 | 精品91麻豆免费免费国产在线 | 亚洲视频一区二区三区 | 4399一级成人毛片 | 一二三四视频社区5在线高清视频 | 精品一区二区三区五区六区七区 | 青草碰人人澡人人澡 | 福利片在线看 | 色视频在线观看 | 久久久久久久久中文字幕 | 国产色手机在线观看播放 | 九九51精品国产免费看 | 亚洲激情在线播放 | 免费看美女毛片 | 日韩精品一区二区三区乱码 | 天天久久狠狠伊人第一麻豆 | 一级毛片中文字幕 | 在线观看精品视频一区二区 | 一级做a爰毛片 | 图片小说亚洲 | 日韩在线观看一区 | 亚欧免费视频一区二区三区 | 一色屋色费精品视频在线看 | 婷婷成人基地 | 国产一区二区自拍视频 | 欧美黄色第一页 | 2020国产成人精品视频人 | 岛国大片免费看 | www久久久久 | 2021久久精品国产99国产 | 国内精品福利视频 | 国产午夜亚洲精品不卡福利 | 久久亚洲国产最新网站 | 黄频在线 | 久久一日本道色综合久 | 伊人色综合久久天天网 |