持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法(部署流水線)第十章:應(yīng)用程序的部署與發(fā)布

《持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法》讀書筆記

引言

發(fā)布到生產(chǎn)環(huán)境和部署到測試環(huán)境的差異應(yīng)該被封裝在一組配置文件中,遵循一樣的部署過程。啟動自動部署系統(tǒng),將要部署的軟件版本與環(huán)境名稱告訴它,點(diǎn)擊開始,后綴部署與發(fā)布使用相同的流程铣墨。
我們需要有一個列表,其中包含能夠部署到每個環(huán)境的所有構(gòu)建办绝,并且只要通過點(diǎn)擊就可以選擇一個軟件版本向某個環(huán)境進(jìn)行自動部署伊约。同時這種方式是對環(huán)境修改的唯一途徑(包括對操作系統(tǒng)和第三方軟件配置的修改)。

創(chuàng)建發(fā)布策略(文檔)

  • 每個環(huán)境的部署由發(fā)布由誰負(fù)責(zé)
  • 創(chuàng)建一個資產(chǎn)和配置管理策略
  • 部署時所用的技術(shù)的描述孕蝉。運(yùn)維團(tuán)隊與開發(fā)團(tuán)隊?wèi)?yīng)對其達(dá)成共識
  • 實現(xiàn)部署流水線的計劃
  • 枚舉所有的環(huán)境屡律,包括用于驗收測試、容量測試降淮、集成測試超埋、用戶驗收測試的環(huán)境,以及每個構(gòu)建在這些環(huán)境中的移動過程
  • 描述在測試和生產(chǎn)環(huán)境中部署時應(yīng)該遵循的流程佳鳖,比如一個變更申請霍殴,及申請授權(quán)等
  • 對應(yīng)用程序的監(jiān)控需求,包括用于通知運(yùn)維團(tuán)隊關(guān)于應(yīng)用程序相關(guān)狀態(tài)的API和服務(wù)
  • 討論部署時和運(yùn)行時的配置方法如何管理系吩,以及它們與自動化部署流程是如何關(guān)聯(lián)在一起的
  • 描述應(yīng)用程序如何與所有外部系統(tǒng)集成
  • 如何記錄日志詳情有鹿,以便運(yùn)維人員能夠確定應(yīng)用程序的狀態(tài)军拟,識別出錯原因
  • 制定災(zāi)難恢復(fù)計劃,以便在災(zāi)難發(fā)生后,恢復(fù)應(yīng)用程序的狀態(tài)
  • 對軟件的服務(wù)級別達(dá)成一致
  • 生產(chǎn)環(huán)境的數(shù)量大小 及容量計劃:應(yīng)用程序會創(chuàng)建多少數(shù)據(jù)模庐,需要多少個日志文件或數(shù)據(jù)庫,需要多少帶寬或磁盤空間,用戶對響應(yīng)延遲的容忍度是什么?
  • 制定一個歸檔策略菜皂,以便不必為了審計或技術(shù)支持而保留生產(chǎn)數(shù)據(jù)
  • 如何對生產(chǎn)環(huán)境進(jìn)行首次部署
  • 如何修復(fù)生產(chǎn)環(huán)境中出現(xiàn)的缺陷,并為其打補(bǔ)丁
  • 如何升級生產(chǎn)環(huán)境中的應(yīng)用程序以及遷移數(shù)據(jù)
  • 如何做應(yīng)用程序生產(chǎn)服務(wù)與技術(shù)支持

隨著項目的進(jìn)行厉萝,這個策略文檔也會改變

應(yīng)用程序的部署與晉級

每次部署時都使用同樣的方法恍飘,使用相同的流程向每個環(huán)境部署,包括生產(chǎn)環(huán)境冀泻。在首次向測試環(huán)境部署時就應(yīng)該使用自動化部署常侣。

首次部署

在第一個迭代里蜡饵,選擇一至兩個具有高優(yōu)先級但非常簡單的用戶故事或需求弹渔,讓部署流水線的前幾個階段可以運(yùn)行,且能夠部署并展示一些成果溯祸。把它看作實現(xiàn)部署流水線的“抽水泵”
這個啟動迭代結(jié)束后肢专,應(yīng)該已經(jīng)完成了以下內(nèi)容:

  • 部署流水線線的提交階段
  • 一個用于部署的類生產(chǎn)環(huán)境
  • 通過一個自動化過程獲取在提交階段中生成的二進(jìn)制包,并將其部署到這個類生產(chǎn)環(huán)境(UAT)中
  • 一個簡單的冒煙測試焦辅,用于驗證本次部署的正確性

對發(fā)布過程進(jìn)行建模并讓構(gòu)建晉級

在構(gòu)建中重點(diǎn)注意以下內(nèi)容

  • 為了達(dá)到發(fā)布質(zhì)量博杖,一個構(gòu)建版本要通過哪些測試階段
  • 每個階段需要設(shè)置怎樣的晉級門檻或者需要怎樣的簽字許可
  • 對每個晉級門檻來說,誰有權(quán)批準(zhǔn)讓該構(gòu)建通過該階段
測試與發(fā)布流程

配置的晉級

除了二進(jìn)制需要晉級筷登,環(huán)境與應(yīng)用程序的配置信息也需要晉級剃根。但是并不是所有的配置都需要晉級,這就需要對配置信息進(jìn)行晉級管理前方。

  • 用冒煙測試來驗證配置信息的正確性狈醉。
  • 對于中間件的配置,利用像Nagios這樣工具來監(jiān)控這些設(shè)置惠险。
  • 寫一些對基礎(chǔ)設(shè)置的測試苗傅,用于檢查關(guān)鍵設(shè)置,并將其返回給監(jiān)控軟件班巩。

聯(lián)合環(huán)境

SIT環(huán)境中更多的工作是部署每個應(yīng)用程序的新版本渣慕,直到所有應(yīng)用程序可以互相聯(lián)通。

部署到試運(yùn)行環(huán)境

項目開始時就需要計劃以下事情:

  • 確保生產(chǎn)環(huán)境抱慌、容量測試環(huán)境和試運(yùn)行環(huán)境已準(zhǔn)備好
  • 準(zhǔn)備好一個自動化過程逊桦,對環(huán)境進(jìn)行配置,包括網(wǎng)絡(luò)配置抑进、外部服務(wù)和基礎(chǔ)設(shè)置
  • 確保部署流程是經(jīng)過充分冒煙測試的
  • 度量應(yīng)用程序的“預(yù)熱”時長强经。如果應(yīng)用程序使用了緩存,這一點(diǎn)就尤其重要单匣,將它也納入到部署計劃中
  • 與外部系統(tǒng)進(jìn)行測試集成
  • 如果可能夕凝,發(fā)布之前就把應(yīng)用程序放在生產(chǎn)環(huán)境上部署宝穗。藍(lán)綠部署
  • 如果可能,把應(yīng)用程序發(fā)布給所有人之前码秉,將它發(fā)布給一小部分用戶群逮矛。金絲雀發(fā)布
  • 將每次已通過驗收測試的變更版本部署在試運(yùn)行環(huán)境中

部署回滾和零停機(jī)發(fā)布

制定回滾計劃時,需要遵循兩個原則:

  • 發(fā)布前转砖,確保生產(chǎn)系統(tǒng)的狀態(tài)(數(shù)據(jù)庫和保存在文件系統(tǒng)中的狀態(tài))已備份
  • 每次發(fā)布之前都練習(xí)一下回滾計劃须鼎,包括從備份中恢復(fù)或把數(shù)據(jù)庫備份遷移回來

通過重新部署歷史版本進(jìn)行回滾

優(yōu)點(diǎn):可預(yù)知時間內(nèi)恢復(fù),且風(fēng)險較低府蔗;部署操作經(jīng)過運(yùn)行晋控,而回滾頻率低,所以回滾腳本更不穩(wěn)定
缺點(diǎn):部署需要時間姓赤,業(yè)務(wù)有中斷赡译;覆蓋部署,難以查找問題原因不铆;新版本運(yùn)行時產(chǎn)生的數(shù)據(jù)丟失蝌焚。

零停機(jī)部署

將用戶從一個版本幾乎瞬間轉(zhuǎn)移到另一個版本,如果出問題誓斥,可以瞬間將用戶轉(zhuǎn)到碑的版本上只洒。不同版本應(yīng)用獨(dú)立部署。

藍(lán)綠部署

保留兩個相同的生產(chǎn)環(huán)境版本劳坑,“藍(lán)環(huán)境”毕谴、“綠環(huán)境”。
將新版本部署在“藍(lán)環(huán)境”下距芬,在藍(lán)環(huán)境下測試完成后涝开,將路由配置到藍(lán)環(huán)境。如果出現(xiàn)問題蔑穴,把路由器切回到綠環(huán)境上即可忠寻,此時藍(lán)環(huán)境用于查找問題。

藍(lán)綠部署要小心管理數(shù)據(jù)庫存和。解決辦法如下:

在切換之前暫時將應(yīng)用程序變成只讀狀態(tài)一小段時間奕剃,將綠數(shù)據(jù)庫復(fù)制一份,并恢復(fù)到藍(lán)數(shù)據(jù)庫中捐腿,執(zhí)行遷移操作纵朋,再將用戶切換到藍(lán)系統(tǒng)。如果一切正常茄袖,再把應(yīng)用程序切換到讀寫方式操软,如果出現(xiàn)問題,只要把它切回綠數(shù)據(jù)庫就可以了宪祥。
如果問題出現(xiàn)時聂薪,應(yīng)用程序中已經(jīng)寫入了一些數(shù)據(jù)到藍(lán)系統(tǒng)家乘,那么切回去之前需要將新記錄遷回到綠數(shù)據(jù)庫中
還可以找個辦法讓應(yīng)用程序的新版本把數(shù)據(jù)庫事務(wù)同時發(fā)向新舊兩個數(shù)據(jù)庫

如果只有一個生產(chǎn)環(huán)境,也可以使用藍(lán)錄部署藏澳。讓應(yīng)用程序兩個副本一起運(yùn)行在同一個環(huán)境中仁锯。

金絲雀發(fā)布

金絲雀發(fā)布:把應(yīng)用程序的某個新版本部署到生產(chǎn)環(huán)境中的部署服務(wù)器中,從而快速得到反饋翔悠。

  1. 部署新版本到一部分服務(wù)器上业崖,對新版本上做冒煙測試,容量測試蓄愁。
  2. 選擇一部分用戶双炕,把他們引到新版本上
  3. 還可以部署多個版本,將不同組用戶引導(dǎo)到不同版本上

好處:

  • 非常容易回滾撮抓,只要不把用戶引到有問題的版本
  • 將用記引致新舊版本妇斤,從而作A/B測試
  • 可以通過逐漸增加負(fù)載,慢慢地把用戶引到新版本胀滚,檢驗應(yīng)用程序是否滿足容量需求

緊急修復(fù)

牢記:任何情況下趟济,都不能破壞流程乱投。緊急修復(fù)版本也需要走構(gòu)建咽笼、部署、測試和發(fā)布流程戚炫。
讓每個緊急修復(fù)都走完標(biāo)準(zhǔn)的部署流水線剑刑。
緊急修復(fù)的另一個做法是回滾到舊的好版本上。
處理生產(chǎn)環(huán)境的缺陷時應(yīng)用考慮以下因素:

  • 別加班到深夜來做双肤,應(yīng)該與別人一起結(jié)對做
  • 確保有一個已經(jīng)測試過的緊急修復(fù)流程
  • 對于應(yīng)用程序的變更施掏,避免繞過標(biāo)準(zhǔn)的流程,除非在極端情況下
  • 確保在試運(yùn)行環(huán)境上對緊急修復(fù)版本做過測試
  • 有時候回滾比部署新的修復(fù)版本更劃算

持續(xù)部署

使用部署流水線茅糜、讓部署到生產(chǎn)也自動化七芭。如果某次提交的代碼通過了所有的自動化測試,就直接部署到生產(chǎn)環(huán)境中蔑赘。
持續(xù)部署可以與金絲雀發(fā)布結(jié)合狸驳,先通過自動過程發(fā)布給一小部分用戶,如果沒有問題缩赛,就發(fā)布給所有用戶耙箍。

小貼士

  • 真正執(zhí)行部署操作的人應(yīng)該參與部署過程的創(chuàng)建
  • 記錄部署活動
  • 不要刪除舊文件,而是移動到別的位置
  • 部署是整個團(tuán)隊的責(zé)任
  • 服務(wù)器應(yīng)用程序不應(yīng)該有GUI
  • 為新部署留預(yù)熱期
  • 快速失敗
  • 不要直接對生產(chǎn)環(huán)境進(jìn)行修改
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酥馍,一起剝皮案震驚了整個濱河市辩昆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旨袒,老刑警劉巖汁针,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术辐,死亡現(xiàn)場離奇詭異,居然都是意外死亡施无,警方通過查閱死者的電腦和手機(jī)术吗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帆精,“玉大人较屿,你說我怎么就攤上這事∽苛罚” “怎么了隘蝎?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長襟企。 經(jīng)常有香客問我嘱么,道長,這世上最難降的妖魔是什么顽悼? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任曼振,我火速辦了婚禮,結(jié)果婚禮上蔚龙,老公的妹妹穿的比我還像新娘冰评。我一直安慰自己,他們只是感情好木羹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布甲雅。 她就那樣靜靜地躺著,像睡著了一般坑填。 火紅的嫁衣襯著肌膚如雪抛人。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天脐瑰,我揣著相機(jī)與錄音妖枚,去河邊找鬼。 笑死苍在,一個胖子當(dāng)著我的面吹牛绝页,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忌穿,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抒寂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掠剑?” 一聲冷哼從身側(cè)響起屈芜,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后井佑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體属铁,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年躬翁,在試婚紗的時候發(fā)現(xiàn)自己被綠了焦蘑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡盒发,死狀恐怖例嘱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宁舰,我是刑警寧澤拼卵,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站蛮艰,受9級特大地震影響腋腮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壤蚜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一即寡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袜刷,春花似錦聪富、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至草则,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蟹漓,已是汗流浹背炕横。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葡粒,地道東北人份殿。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像嗽交,于是被迫代替她去往敵國和親卿嘲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容