【讀書筆記-022】持續(xù)交付2.0之軟件配置管理

“一切都自動化”是持續(xù)交付部署流水線的一種重要原則颅痊,也是提升“持續(xù)交付驗證環(huán)”運轉(zhuǎn)速度的一個重要影響因素夫否,軟件配置管理是成為“一切自動化”的基石彻犁。

將一切納入配置管理

軟件配置管理:在整個軟件生命周期中,對生產(chǎn)與運行環(huán)節(jié)中相關(guān)產(chǎn)物的管理凰慈,包括產(chǎn)物自身及其唯一標識和修訂歷史汞幢,以及不同產(chǎn)物之間的關(guān)聯(lián)關(guān)系等。其目標是記錄并管理軟件產(chǎn)品演化的過程微谓,確保組織在軟件生命周期中的各個階段都能得到精確的產(chǎn)品配置森篷,并提升各角色間的協(xié)作效率。

配置管理的目標

獲得可追溯性和可重現(xiàn)性豺型,提升軟件整個生命周期管理的安全性仲智,并提高團隊協(xié)作效率。

  • 可追溯性:任何在獲得授權(quán)的前提下触创,能夠找到該軟件的任何變更歷史
  • 可重現(xiàn)性:任何人在獲得授權(quán)的前提下坎藐,能夠重現(xiàn)從過去到現(xiàn)在之間任意時間點的軟件狀態(tài)。

配置管理的范圍

在軟件的整個生命周期中哼绑,包括四類制品岩馍,即需求、源代碼抖韩、軟件包和環(huán)節(jié)蛀恩,這些事軟件配置管理的范圍。


配置管理的范圍

軟件配置的管理原則

一切皆有版本

如果想要更快地發(fā)布軟件茂浮,僅僅對軟件的源代碼和發(fā)布上線的軟件包進行版本管理是不夠的双谆,這種程度并不充分也不全面,還需要包括:

  1. 操作系統(tǒng)層:操作系統(tǒng)席揽、網(wǎng)絡(luò)配置以及網(wǎng)絡(luò)及系統(tǒng)通用管理服務(wù)顽馋;
  2. 標準軟件層:應(yīng)用程序所依賴的標準化軟件包,以獨立進程形式運行幌羞,并為上層的應(yīng)用程序提供基礎(chǔ)服務(wù)寸谜,如數(shù)據(jù)存儲、消息通訊属桦、網(wǎng)絡(luò)服務(wù)熊痴、數(shù)據(jù)庫軟件(MySQL他爸、Redis等)、消息中間件(RabbitMQ等)果善、ZooKepper等诊笤;
  3. 應(yīng)用軟件層:團隊開發(fā)的應(yīng)用層序,以及該應(yīng)用程序運行時所依賴的第三方組件庫及相關(guān)數(shù)據(jù)巾陕。
    持續(xù)交付中的版本管理內(nèi)容

共享唯一受信源

唯一受信源使得團隊成員能夠掌握任意時刻的軟件狀態(tài)讨跟,并確保所有人所獲得的信息都是一致的,其中包括三種數(shù)據(jù)惜论,即業(yè)務(wù)需求/缺陷许赃、源代碼和軟件包。

  • 需求倉庫:保存有關(guān)產(chǎn)品的所有版本需求描述和驗收條件馆类,并且能夠記錄每一次團隊對需求達成共識后的版本變更記錄;
  • 代碼倉庫:保存所有源代的變更歷史弹谁,除了源代碼乾巧,還包括軟件包整個生命周期中的所有以代碼形式存在的內(nèi)容,如測試代碼预愤、自動化腳本以及環(huán)境配置信息沟于、軟件包構(gòu)建依賴信息等;
  • 軟件包倉庫:自動保存部署流水線生產(chǎn)加工出來的軟件包植康,滿足后續(xù)環(huán)節(jié)的快速取用旷太,包括三種倉庫:
  1. 臨時產(chǎn)物倉庫:作為團隊內(nèi)部在某個發(fā)布版本處于開發(fā)期間進行協(xié)作溝通的唯一的軟件包受信源,避免因環(huán)境不一致或重復打包等問題引入不必要的風險和浪費销睁;
  2. 正式發(fā)布倉庫:保存通過質(zhì)量驗證供璧,即將上線或者已經(jīng)上線的所有軟件包,通過在受控管理系統(tǒng)上通過人工標記和自動傳遞方式冻记,將經(jīng)過驗證達標的軟件包從臨時倉庫移到正式發(fā)布包倉庫睡毒;
  3. 外部軟件包倉庫:第三方軟件庫的私有服務(wù)器,用于存儲內(nèi)部所有軟件所需引用冗栗、包含或使用的外部第三方受信軟件包演顾。

標準化與自動化

基線管理:所有倉庫在某一個時刻的“快照”,在創(chuàng)建基線時隅居,對倉庫中的當前版本一個整體標記或復制钠至,以整體記錄此階段的成果。

軟件包的版本管理

集中式包管理服務(wù)

建立企業(yè)級的統(tǒng)一軟件包庫管理系統(tǒng)胎源,將所有軟件包納入其中棉钧,并且對企業(yè)內(nèi)部團隊提供穩(wěn)定的查詢、獲取和申請等服務(wù)乒融。企業(yè)既可以自己開發(fā)這樣的庫管理系統(tǒng)掰盘,也可以使用開源或商業(yè)的包管理軟件摄悯,比如Nexus和Artifactory等。其優(yōu)點在于:

  • 統(tǒng)一存儲愧捕,空間占用少奢驯;
  • 一致性。全公司使用統(tǒng)一的副本次绘,是所有軟件包的唯一來源瘪阁;
  • 安全省心∮寿耍可以對軟件包進行統(tǒng)一的安全掃描管跺、法律審計管理。
  • 下載速度快禾进。

軟件包的元信息

需要為每個軟件包設(shè)置一些信息來描述和定義軟件包倉庫中的每一個軟件包豁跑,以便于互相引用、溯源和檢索泻云。需要包括如下信息:

  • 唯一標識信息
  • 來源信息艇拍,如由誰提供、源代碼在哪里宠纯、現(xiàn)在的狀態(tài)如何等
  • 依賴信息卸夕,是否引用了其他軟件包

包依賴管理

軟件包之間的依賴關(guān)系具有“重用”和“便捷性”兩大特點,為了做好包依賴管理婆瓜,需要從顯示聲明依賴快集、自動管理依賴和減少復雜依賴這三個方面入手。

  • 顯示聲明依賴:將應(yīng)用程序在不同環(huán)境中所需的軟件包以及相應(yīng)的版本信息廉白,通過事先約定的描述方式記錄在文檔中个初。大多數(shù)的編程語言都有與其對應(yīng)的軟件包構(gòu)建管理工具,比如Maven和Gradle等蒙秒;
  • 自動管理依賴:在顯示聲明對軟件包的依賴之后勃黍,當構(gòu)建、測試或部署軟件時晕讲,只要有工具能夠識別依賴描述文件覆获,即可自動從軟件包倉庫下載和更新依賴軟件包;
  • 減少復雜依賴:軟件包倉庫需要額外提供一種能力瓢省,可以檢查每個軟件包的依賴關(guān)系弄息,發(fā)現(xiàn)其中的依賴問題、風險與隱患勤婚,比如依賴過多摹量、鏈條過長、依賴沖突和循環(huán)依賴等。

環(huán)境基礎(chǔ)設(shè)施管理

環(huán)境基礎(chǔ)設(shè)施:包括基礎(chǔ)操作系統(tǒng)層和標準應(yīng)用層缨称,它們是軟件運行的基礎(chǔ)上下文凝果,具有變更頻率低的特點。

環(huán)境準備的四種狀態(tài)

隨著業(yè)務(wù)的升級和基礎(chǔ)設(shè)施技術(shù)的不斷發(fā)展睦尽,環(huán)境準備工作內(nèi)容和工作方式也不斷變化器净,可分為四種狀態(tài):

  • 以人腦+手工為代表的蠻荒狀態(tài):軟件較簡單、用戶數(shù)量不多時当凡,由開發(fā)人員自己搞定所有與軟件部署相關(guān)的問題山害;
  • 以文檔+私有腳本為代表的規(guī)范化狀態(tài):在上線前提供上線部署文檔和規(guī)范化的上線部署流程,由運維人員來負責版本的變更沿量;
  • 以辦公自動化為代表的標準化狀態(tài):開始搭建自動化平臺浪慌,將上線部署文檔和流程在web頁面上提交,運維人員按照步驟手工執(zhí)行朴则;
  • 以受控式自動化腳本為代表的自動化狀態(tài):自動化平臺管理自動化腳本权纤,包括兩種腳本:
  1. 過程式腳本:最傳統(tǒng)的自動化腳本,通過模擬手工執(zhí)行步驟的自動化命令佛掖,缺點在于妖碉,不是冪等操作,每次執(zhí)行的結(jié)果可能不一致芥被;
  2. 狀態(tài)聲明式腳本:在腳本中指定環(huán)境的目標狀態(tài),由定義該狀態(tài)申明規(guī)范的平臺執(zhí)行這個腳本坐榆,該操作是冪等的拴魄。目前主流的狀態(tài)聲明式工具有,Puppet席镀、Chef匹中、Ansible和SaltStack等。

環(huán)境基礎(chǔ)設(shè)施即代碼

將環(huán)境基礎(chǔ)搭建的一系列準備工作以腳本的方式描述出來豪诲,并能夠通過自動化的方式來執(zhí)行這些腳本顶捷,即環(huán)境基礎(chǔ)設(shè)施即代碼,好處在于:

  • 無論哪類環(huán)境出了問題屎篱,都可以快速自動化地構(gòu)建出一個全新的環(huán)境服赎;
  • 只要獲得授權(quán),任何人都可完成這項任務(wù)交播,不需要其他人幫助重虑;
  • 任何對環(huán)境的修改都可以被記錄和審計;
  • 對不同環(huán)境來說秦士,只要將其代碼描述進行對比缺厉,就可以了解它們的差異而無需登錄到實際主機上查看。

軟件配置項的管理

軟件配置項:軟件構(gòu)建時或運行于不同環(huán)境中時,通過設(shè)定這些配置項所對應(yīng)的不同具體值提针,軟件能夠產(chǎn)生不同的行為命爬。

二進制與配置項的分離

一個軟件包通常由二進制文件與配置項組成,對其中任何配置項的修改辐脖,都會形成由二進制文件和新的配置項集合構(gòu)成的新的二元組饲宛,成為一個新的部署包。將兩者分離揖曾,從而實現(xiàn)只需要構(gòu)建一次落萎,在部署流水線的不同階段就可以重復使用的目的,從而確保在不同階段所驗證使用的二進制文件是完全相同的炭剪,只是由于運行環(huán)境的不同而使用取值不同的配置項练链。

配置信息的分類

根據(jù)配置項的內(nèi)容不同,可分為三類:

  • 環(huán)境配置項:與運行環(huán)境相關(guān)奴拦,比如所用到的域名或IP地址媒鼓,與其他系統(tǒng)或服務(wù)通信的服務(wù)地址與端口號;
  • 應(yīng)用配置項:與信息安全控制及應(yīng)用程序自身相關(guān)错妖,比如賬號密碼绿鸣、數(shù)據(jù)庫連接池大小、初始分配內(nèi)存大小暂氯、日志級別等潮模;
  • 業(yè)務(wù)配置項:與應(yīng)用程序所執(zhí)行的業(yè)務(wù)行為相關(guān),每一配置項都有默認值痴施,如功能特性開關(guān)擎厢,商品定價策略等。

配置漂移與治理

配置漂移:隨時間發(fā)展辣吃,由于各種未預期原因而做出的配置修改引起計算機或軟件服務(wù)偏離了我們所希望的配置狀態(tài)动遭,通常是由于人的臨時修改而引起,也可能是為了緩解生產(chǎn)環(huán)境突然出現(xiàn)的某個嚴重問題而臨時調(diào)整了某些機器的網(wǎng)絡(luò)配置神得;配置漂移往往使得生產(chǎn)環(huán)境處于某種不確定的狀態(tài)厘惦,甚至會導致重大生產(chǎn)事故。
配置漂移治理:構(gòu)建好的軟件配置管理流程哩簿,比如宵蕉,將靜態(tài)配置放入版本控制庫中,并禁止直接登錄到主機環(huán)境修改配置信息卡骂,只能提交修改到代碼倉庫国裳,并通過自動化方式進行生產(chǎn)環(huán)境中配置的修改,避免由于人為操作遺漏造成的配置漂移全跨;還有一種更為嚴格的方式缝左,就是“不可變基礎(chǔ)設(shè)施”。

不可變設(shè)施

不可變基礎(chǔ)設(shè)施要求,需要對其中任何一層進行變更時渺杉,只能通過整體替換的方式進行蛇数,而不能通過對其中某一層的內(nèi)容直接進行更新或修改的方式進行,需要具備三個要求:

  • 系統(tǒng)運行環(huán)境的準備均已自動化方式完成
  • 一旦完成準備工作是越,該基礎(chǔ)設(shè)施的任何一個層次均不得更改
  • 如果因為某種原因需要對該系統(tǒng)環(huán)境進行更改耳舅,則必須使用另一個不可變系統(tǒng)環(huán)境來替代之,而不是對原系統(tǒng)環(huán)境進行變更倚评。

實現(xiàn)不可變基礎(chǔ)設(shè)施

  • 物理機鏡像技術(shù)和虛擬機鏡像技術(shù):使用鏡像工具(如Full Automatic Installer, SystemImager和ISO鏡像工具)對已經(jīng)安裝好應(yīng)用程序運行環(huán)境進行鏡像備份浦徊,并將鏡像文件保存到統(tǒng)一的鏡像倉庫中,可以直接拉取鏡像直接部署到宿主機上天梧,進行簡單配置調(diào)整后立即投入使用盔性。
  • Docker容器技術(shù):更輕量級的容器技術(shù),它比物理機鏡像和虛擬機鏡像具有更低的成本呢岗。

優(yōu)勢

  • 簡化運維工作:可以全自動完成
  • 部署流程自文檔:只需要創(chuàng)建一個描述性文本文件說明如何正確生成應(yīng)用程序的運行鏡像即可冕香,不需要詳細的部署應(yīng)用程序的自動化步驟。
  • 持續(xù)部署不停機后豫,故障更少:所有變更都可以由源代碼管理悉尾,通過部署流水線進行跟蹤,基礎(chǔ)設(shè)施的每一項均可以以腳本形式進行挫酿,將準備好的不可變基礎(chǔ)設(shè)施直接進行替換
  • 減少錯誤和威脅:通過自動化替換而不是修復构眯,可以更頻繁且規(guī)律性地重新生成實例,減少配置漂移早龟。
  • 多個環(huán)境基礎(chǔ)設(shè)施的一致性:虛擬化和容器化技術(shù)使得開發(fā)和測試環(huán)節(jié)就能夠以更廉價的方式得到與生產(chǎn)環(huán)境類似的環(huán)境基礎(chǔ)設(shè)施鸵赖,并對其進行驗證,從而減少因測試環(huán)境與生產(chǎn)環(huán)境過多的差異而導致的生產(chǎn)問題拄衰。
  • 杜絕了配置漂移:整個不可變基礎(chǔ)設(shè)施被作為一個整體使用,若需要對其中任何信息進行修改饵骨,都要重新生成鏡像翘悉。
  • 被測試的即是被使用的:一旦對代碼或配置修改完成,就會立即生成不可變的基礎(chǔ)鏡像居触,經(jīng)過整個部署流水線的驗證妖混,可以確保生產(chǎn)環(huán)境使用的一定就是被驗證的。

挑戰(zhàn)

  • 為不可變基礎(chǔ)設(shè)施建立一套自動化運維體系在初期需要較高的成本轮洋;
  • 生產(chǎn)環(huán)境中突發(fā)問題的修復時間可能會稍長制市,因為禁止直接通過SSH連接到當前有問題的服務(wù)器,只能通過重新生成鏡像再部署上線弊予;
  • 對大規(guī)模軟件服務(wù)來說祥楣,將大尺寸鏡像分發(fā)到多臺宿主機上需要耗費大量的網(wǎng)絡(luò)資源,時間耗費也會不少;
  • 有狀態(tài)存儲的軟件服務(wù)并不容易被直接替換误褪,比如數(shù)據(jù)庫實例责鳍,擁有大量的數(shù)據(jù)量。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兽间,一起剝皮案震驚了整個濱河市历葛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘀略,老刑警劉巖恤溶,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帜羊,居然都是意外死亡咒程,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門逮壁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孵坚,“玉大人,你說我怎么就攤上這事窥淆÷舫瑁” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵忧饭,是天一觀的道長扛伍。 經(jīng)常有香客問我,道長词裤,這世上最難降的妖魔是什么刺洒? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮吼砂,結(jié)果婚禮上逆航,老公的妹妹穿的比我還像新娘。我一直安慰自己渔肩,他們只是感情好因俐,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著周偎,像睡著了一般抹剩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓉坎,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天澳眷,我揣著相機與錄音,去河邊找鬼蛉艾。 笑死钳踊,一個胖子當著我的面吹牛衷敌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箍土,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逢享,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吴藻?” 一聲冷哼從身側(cè)響起瞒爬,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沟堡,沒想到半個月后侧但,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡航罗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年禀横,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥血。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡柏锄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出复亏,到底是詐尸還是另有隱情趾娃,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布缔御,位于F島的核電站抬闷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耕突。R本人自食惡果不足惜笤成,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眷茁。 院中可真熱鬧炕泳,春花似錦、人聲如沸上祈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雇逞。三九已至,卻和暖如春茁裙,著一層夾襖步出監(jiān)牢的瞬間塘砸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工晤锥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掉蔬,地道東北人廊宪。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像女轿,于是被迫代替她去往敵國和親箭启。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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