一蠢甲、概述開發(fā)模式
?無論是瀑布式開發(fā)僵刮、敏捷式開發(fā)還是DevOps,整個(gè)流程都分為設(shè)計(jì)峡钓、開發(fā)妓笙、測試和部署四個(gè)部分若河,只不過各個(gè)部分的開始和結(jié)束時(shí)間節(jié)點(diǎn)不同能岩。如下圖所示:
?從瀑布式開發(fā)到敏捷開發(fā)再到DevOps,各個(gè)階段的切換速度越來越快萧福,瀑布式開發(fā)和敏捷開發(fā)的運(yùn)維部署工作都是放到最后拉鹃,而DevOps結(jié)合敏捷開發(fā)思想,將部署工作也敏捷起來鲫忍。
二膏燕、瀑布式開發(fā)
2.1 簡述瀑布式開發(fā)
?瀑布式開發(fā)是早期被廣泛采用的軟件開發(fā)模型。要求有明確的需求悟民,按照需求一步步做好規(guī)劃坝辫,每一階段工作的完成是下一階段開始的前提,每一階段都要進(jìn)行嚴(yán)格的評(píng)審射亏,保證各階段的工作做得足夠好時(shí)才允許進(jìn)入下一階段近忙,它適用于需求明確的項(xiàng)目。
?最大的風(fēng)險(xiǎn)是智润,當(dāng)產(chǎn)品研發(fā)完成后及舍,到了產(chǎn)品測試階段如果發(fā)現(xiàn)了問題,或者發(fā)現(xiàn)其無法滿足市場需求窟绷,那么就需要重新開發(fā)锯玛,甚至需要重新規(guī)劃產(chǎn)品。
三兼蜈、敏捷式開發(fā)
3.1簡述
?敏捷開發(fā)是一種以用戶需求進(jìn)化為核心攘残、倡導(dǎo)擁抱變化拙友、循環(huán)迭代、循環(huán)漸進(jìn)的開發(fā)方法歼郭。首先把用戶最關(guān)心的軟件原型做出來并交付給用戶献宫,用戶在實(shí)際場景中發(fā)現(xiàn)問題并給予反饋,研發(fā)人員快速修改彌補(bǔ)需求中的不足实撒。上述過程不斷迭代姊途,直到用戶滿意。
?敏捷追求“更早地交付價(jià)值知态,更靈活地應(yīng)對(duì)變化”捷兰,適用于需求不明確、創(chuàng)新性或者需要搶占市場的項(xiàng)目负敏,特別適合互聯(lián)網(wǎng)項(xiàng)目贡茅。
3.2 原則
- 我們最重要的目標(biāo),是通過持續(xù)不斷地及早交付有價(jià)值的軟件來使客戶滿意其做。
- 欣然面對(duì)需求變化顶考,即使到了開發(fā)的后期也一樣。敏捷過程利用變化為客戶創(chuàng)造競爭優(yōu)勢(shì)妖泄。
- 經(jīng)常性地交付可以工作的軟件驹沿,交付的間隔可以從幾周到幾個(gè)月,交付的時(shí)間間隔越短越好蹈胡。
- 業(yè)務(wù)人員和開發(fā)人員必須相互合作渊季,項(xiàng)目中的每一條都不例外。
- 激發(fā)個(gè)體的斗志罚渐,以他們?yōu)楹诵拇罱?xiàng)目却汉,提供所需的環(huán)境和支援,輔以信任荷并,從而達(dá)成目標(biāo)合砂。圍
- 無論團(tuán)隊(duì)內(nèi)外,最具有效果并且富有效率的傳遞信息的方法源织,就是面對(duì)面的交談翩伪。
- 可工作的軟件是進(jìn)度的首要進(jìn)度標(biāo)準(zhǔn)。
- 敏捷過程倡導(dǎo)可持續(xù)開發(fā)雀鹃。負(fù)責(zé)人幻工、開發(fā)者和用戶要能夠共同維持其步調(diào)穩(wěn)定連續(xù)。
- 不斷地追求技術(shù)卓越和良好設(shè)計(jì)黎茎,會(huì)增強(qiáng)敏捷能力囊颅。
- 以簡潔為本,極力減少不必要工作量的藝術(shù)。
- 最好的架構(gòu)踢代、需求和設(shè)計(jì)出自于自組織的團(tuán)隊(duì)盲憎。
- 團(tuán)隊(duì)定期地反思如何能夠提高效能,并依此調(diào)整自身的舉止表現(xiàn)胳挎。
3.3 宣言
- 個(gè)體和交互 勝過 過程和工具
- 可以工作的軟件 勝過 面面俱到的文檔
- 客戶合作 勝過 合同談判
- 響應(yīng)變化 勝過 遵循計(jì)劃
四饼疙、DevOps
4.1 簡述
?DevOps是一種方法論,DevOps = Development + Operations
慕爬,即開發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)一體化窑眯,盡可能地為公司創(chuàng)造更多價(jià)值。
?DevOps是一種軟件開發(fā)實(shí)踐医窿,它將人員磅甩、流程和技術(shù)結(jié)合在一起,以交付持續(xù)的價(jià)值姥卢。該方法分為計(jì)劃和跟蹤卷要、開發(fā)、生成和測試独榴、交付以及監(jiān)視和操作僧叉。
?DevOps的獨(dú)特之處在于開發(fā)、IT運(yùn)營棺榔、質(zhì)量工程和安全團(tuán)隊(duì)協(xié)同工作瓶堕,在發(fā)布新產(chǎn)品、版本或更新所涉及的所有任務(wù)中創(chuàng)造效率掷豺。
?DevOps將開發(fā)和運(yùn)營合并為一個(gè)團(tuán)隊(duì)捞烟,專注于快速交付和穩(wěn)定的基礎(chǔ)架構(gòu)。其目標(biāo)包括:
- 將完成的代碼快速交付到生產(chǎn)環(huán)境当船;
- 最小的生產(chǎn)故障。
- 從故障中立即恢復(fù)默辨。
4.2 價(jià)值觀
?DevOps是一種文化德频,是一種軟件開發(fā)的方式或者基礎(chǔ)設(shè)施的方式,也是一種構(gòu)建和部署軟件和應(yīng)用的方式缩幸。它假設(shè)開發(fā)和運(yùn)維之間沒有隔閡壹置,他們一起合作,沒有矛盾表谊。
?DevOps基于其它兩個(gè)領(lǐng)域的實(shí)踐:精益和敏捷钞护。DevOps不是一個(gè)公司內(nèi)的崗位或角色;它是一個(gè)組織或團(tuán)隊(duì)對(duì)持續(xù)交付爆办、持續(xù)部署和持續(xù)集成的堅(jiān)持不懈的追求难咕。三種方式定義的DevOps的理念:
- 第一種:流程原則
- 第二種:反饋原則
- 第三種:持續(xù)學(xué)習(xí)原則
4.3 原則
1、持續(xù)交付的八大原則
?DevOps持續(xù)交付的八大原則對(duì)可運(yùn)維性給出了這樣的定義,在企業(yè)中研發(fā)和運(yùn)維體系必然需要相互配合余佃,開發(fā)團(tuán)隊(duì)負(fù)責(zé)功能性需求實(shí)現(xiàn)的同時(shí)暮刃,在架構(gòu)和編碼上注重非功能性需求的實(shí)現(xiàn),測試團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)將圍繞著各自職能的需求爆土,規(guī)劃與建設(shè)DevOps流水線中對(duì)應(yīng)的工具系統(tǒng)椭懊,加速企業(yè)IT價(jià)值鏈的流轉(zhuǎn),以為企業(yè)創(chuàng)造更大的商業(yè)價(jià)值步势。
- 為軟件的發(fā)布創(chuàng)建一個(gè)可重復(fù)且可靠的過程:標(biāo)準(zhǔn)化發(fā)布操作氧猬,建立可靠的腳本/工具,并用自動(dòng)化流程實(shí)現(xiàn)編排坏瘩。
- 將幾乎所有事情自動(dòng)化:區(qū)分場景狂窑,將計(jì)劃內(nèi)任務(wù)實(shí)現(xiàn)自動(dòng)化運(yùn)維。
- 把所有的東西都納入版本控制:可描述桑腮、可度量泉哈、可監(jiān)督,并納入運(yùn)維平臺(tái)管理破讨。
- 提前并頻繁地做出讓你感到痛苦的事情:讓錯(cuò)誤盡早的暴露丛晦,并修復(fù)它。
- “DONE”意味著“已發(fā)布”:交付到用戶受眾才是完成提陶。
- 交付過程是每個(gè)成員的責(zé)任:協(xié)同合作烫沙,減少等待的浪費(fèi)。
- 持續(xù)改進(jìn):閉環(huán)隙笆,不斷提升能力锌蓄。
2、提倡的原則
- 從瓶頸入手
- Start Small:從小做起
- 痛苦的事情優(yōu)先解決
- 工具也是一種文化
- 自動(dòng)化別人撑柔,先自動(dòng)化自己
- 價(jià)值拉動(dòng)瘸爽,而非事務(wù)驅(qū)動(dòng)
- 構(gòu)建指標(biāo),驅(qū)動(dòng)DevOps落地铅忿。
- 創(chuàng)建從開發(fā)過程下游至上游的反饋環(huán)剪决。
- 強(qiáng)調(diào)全局優(yōu)化,避免局部優(yōu)化
- 持續(xù)做試驗(yàn)和學(xué)習(xí)的文化檀训,通過反復(fù)實(shí)踐來達(dá)到精通柑潦。
4.4 DevOps包含一些工具鏈
?DevOps實(shí)踐涉及到開發(fā)部門以及軟件研發(fā)的整個(gè)生命周期,這意味著在整個(gè)開發(fā)生命周期中峻凫,涉及到一大批新舊工具渗鬼,包括從規(guī)劃、編碼荧琼、測試譬胎、發(fā)布差牛、監(jiān)控等自動(dòng)化的流程工具。
?DevOps融合了一系列基本原則和實(shí)踐的方法論银择,并從這些實(shí)踐中派生出了各種工具多糠。這些工具體現(xiàn)在軟件開發(fā)和交付過程的不斷階段。
- 編碼:代碼開發(fā)和審閱浩考,版本控制工具夹孔、代碼合并工具
- 構(gòu)建:持續(xù)集成工具、構(gòu)建狀態(tài)統(tǒng)計(jì)工具
- 測試:通過測試和結(jié)果確定績效的工具
- 打包:成品倉庫析孽、應(yīng)用程序部署前暫存
- 發(fā)布:變更管理搭伤、發(fā)布審批、發(fā)布自動(dòng)化
- 配置:基礎(chǔ)架構(gòu)配置和部署袜瞬,基礎(chǔ)架構(gòu)即代碼工具
- 監(jiān)控:應(yīng)用程序性能監(jiān)控怜俐、最終用戶體驗(yàn)
4.5 實(shí)踐DevOps需要建立哪些能力
1、不可或缺的自動(dòng)化能力
主要體現(xiàn)在三點(diǎn)上:
- 自動(dòng)化比手動(dòng)快
- 工具不會(huì)像人一樣容易犯錯(cuò)誤
- 通過自動(dòng)化按照定義執(zhí)行確保每次執(zhí)行的一致性
2邓尤、建立持續(xù)支付能力
主要體現(xiàn)在三點(diǎn)上:
- 通過統(tǒng)一的部署流水線將從代碼提交到交付給用戶的整個(gè)過程高度可視化出來拍鲤,信息透明;讓開發(fā)汞扎、測試和運(yùn)維以高度一致的方式工作在同一個(gè)流水線上季稳,真正建立起協(xié)作。
- 每一次的軟件變更在這個(gè)完整的流水線中得到充分的驗(yàn)證澈魄,盡早發(fā)現(xiàn)有缺陷的變更景鼠。
- 將一些必不可少的控制環(huán)節(jié)內(nèi)建到自動(dòng)化過程中,比如質(zhì)量保障過程痹扇、過程度量铛漓、過程審計(jì)信息等,從而弱化很多傳統(tǒng)依靠人為檢查的管理流程鲫构。
3浓恶、利益共同體的合作文化
以提高業(yè)務(wù)響應(yīng)效率出發(fā),要有一榮俱榮芬迄、精誠合作问顷、共同進(jìn)步的態(tài)度。
?DevOps成功的關(guān)鍵在于文化轉(zhuǎn)變禀梳,除了上面提到工具,組織文化的轉(zhuǎn)變也同等重要肠骆,我們總結(jié)出了很多DevOps的其他因素算途,比如人(People)的思想和思考方式、開發(fā)和運(yùn)維的流程(Process)蚀腿、精益(Lean)嘴瓤、自動(dòng)化(Automation)扫外、測量(Measurement)。
在組織文化方面廓脆,DevOps推崇:
- 尊重(Respect)
- 正視失斏秆琛(Healthy attitude about failure)
- 不埋怨(Avoiding Blame)
- 精益求精
- 工程質(zhì)量文化
- 快速驗(yàn)證文化
- 客戶導(dǎo)向文化
4.6 最佳實(shí)踐手段:CI/CD
?DevOps是CI/CD思想的延伸,CI/CD則是DevOps的技術(shù)核心停忿,如果沒有CI/CD驾讲,沒有自動(dòng)化測試,DevOps是沒有任何意義的席赂。所以說DevOps是以CI/CD為基礎(chǔ)來優(yōu)化程序的開發(fā)吮铭、測試、運(yùn)維等各個(gè)不同環(huán)節(jié)颅停。
1谓晌、CI
?CI:持續(xù)集成,是一種開發(fā)實(shí)踐癞揉,它倡導(dǎo)團(tuán)隊(duì)成員需要頻繁的集成他們的工作纸肉,每次集成都通過自動(dòng)化構(gòu)建(包括編譯、構(gòu)建喊熟、自動(dòng)化測試)來驗(yàn)證柏肪,從而盡快地發(fā)現(xiàn)集成中的錯(cuò)誤。讓正在開發(fā)的軟件始終處于可工作的狀態(tài)逊移,讓產(chǎn)品快速迭代预吆,同時(shí)還能保持高質(zhì)量。
2胳泉、CD
CD包含了兩層內(nèi)容:持續(xù)交付和持續(xù)部署拐叉。
?持續(xù)交付是持續(xù)集成的延伸或者看作持續(xù)集成的下一步,它將集成后的代碼部署到類生產(chǎn)環(huán)境扇商,確狈锸荩可以以可持續(xù)的方式快速向客戶發(fā)布新的更改。如果代碼沒有問題案铺,可以手工部署到生產(chǎn)環(huán)境中蔬芥。它強(qiáng)調(diào)的是,不管怎么更新控汉,軟件是隨時(shí)隨地可以交付的笔诵。
?持續(xù)部署是持續(xù)交付的下一步,在持續(xù)交付的基礎(chǔ)上姑子,由開發(fā)人員或運(yùn)維人員自助式的定期向生產(chǎn)環(huán)境部署穩(wěn)定的構(gòu)建版本乎婿,持續(xù)部署的目標(biāo)是代碼在任何時(shí)刻都是可部署的,并可自動(dòng)進(jìn)入到生產(chǎn)環(huán)境街佑。
?持續(xù)交付是指團(tuán)隊(duì)確保每個(gè)變更可以部署至生產(chǎn)環(huán)境谢翎,但也許并不需要實(shí)際部署捍靠,這通常可能是處于業(yè)務(wù)方面的原因森逮。而持續(xù)部署是指每個(gè)變更可以自動(dòng)部署到生產(chǎn)環(huán)境榨婆。
五、比對(duì)瀑布褒侧、敏捷良风、DevOps
5.1 瀑布的優(yōu)劣
5.2 敏捷的優(yōu)劣
5.3 DevOps的優(yōu)勢(shì)
5.4 敏捷與DevOps共存
?關(guān)于 DevOps 和敏捷,最重要的一點(diǎn)是它們不是互斥的璃搜。
?DevOps 是一種文化拖吼,促進(jìn)所有參與軟件開發(fā)和維護(hù)的參與者之間的協(xié)作。
?敏捷可以被描述為一種開發(fā)方法这吻,旨在需求不斷變化的現(xiàn)實(shí)中維護(hù)工作效率和驅(qū)動(dòng)發(fā)布吊档。
?盡管 DevOps 和敏捷是不同的,但是如果將這兩種方法結(jié)合使用唾糯,將會(huì)帶來更高的效率和更可靠的結(jié)果怠硼。DevOps是敏捷的有效補(bǔ)充,是將運(yùn)維納入產(chǎn)品開發(fā)過程的思維方式移怯,是敏捷開發(fā)方法論的升級(jí)香璃,更強(qiáng)調(diào)自動(dòng)化工具的實(shí)現(xiàn)與應(yīng)用,以幫助實(shí)現(xiàn)軟件的快速迭代。
六、未來發(fā)展
?DevOps是精益思想應(yīng)用在IT領(lǐng)域的必然結(jié)果肌索,源起于開發(fā)側(cè)的敏捷運(yùn)動(dòng),由于端到端的系統(tǒng)優(yōu)化需求眯牧,發(fā)展到開發(fā)、測試赖草、運(yùn)維的聯(lián)動(dòng)学少。
?從其發(fā)展脈絡(luò),可以發(fā)現(xiàn)DevOps的必然發(fā)展方向秧骑,那就是向業(yè)務(wù)側(cè)延伸版确。
6.1 BizDevOps
?業(yè)務(wù)是產(chǎn)品開發(fā)和運(yùn)維的源頭,完整的價(jià)值流必須從源頭開始乎折。這不是預(yù)測绒疗,而是正在發(fā)生的事實(shí),大部分DevOps的實(shí)施都已經(jīng)將業(yè)務(wù)側(cè)包含在內(nèi)骂澄,成為BizDevOps忌堂。
?BizDevOps需要達(dá)成的目標(biāo)如下所示:
- 需求管理:分別從業(yè)務(wù)代表/產(chǎn)品經(jīng)理/開發(fā)人員/測試人員等視角提供符合各自角色的需求看板
- 鏈路打通:打通從需求到設(shè)計(jì),研發(fā)酗洒,測試士修,運(yùn)維,運(yùn)行的信息鏈條
- 價(jià)值流可視化:從端到端可視化地傳遞價(jià)值流
- 促進(jìn)交付質(zhì)量:設(shè)置驗(yàn)收標(biāo)準(zhǔn)樱衷,統(tǒng)計(jì)標(biāo)準(zhǔn)達(dá)成率棋嘲,反饋需求最終交付質(zhì)量
6.2 MLDevOps
?機(jī)器學(xué)習(xí)(ML)系統(tǒng)是一種軟件系統(tǒng),所以DevOps也適用于構(gòu)建和運(yùn)維可靠的ML系統(tǒng)矩桂。然而沸移,ML系統(tǒng)與其他軟件系統(tǒng)有以下不同:
- 團(tuán)隊(duì)技能:一個(gè)ML項(xiàng)目中,通常有專注于數(shù)據(jù)分析侄榴,模型開發(fā)和實(shí)驗(yàn)數(shù)據(jù)科學(xué)家和ML研究人員雹锣,他們對(duì)構(gòu)建生產(chǎn)級(jí)別的服務(wù)可能沒有太多經(jīng)驗(yàn)。
- 開發(fā):ML本事帶有實(shí)驗(yàn)性質(zhì)癞蚕。你可能會(huì)用不同的特征蕊爵、算法、建模方法桦山、參數(shù)設(shè)置攒射,去更快的解決問題。最大的挑戰(zhàn)是追蹤哪種方式有效果或者沒有效果恒水,并且用最可復(fù)用的代碼保證結(jié)果可重現(xiàn)会放。
- 測試:測試ML系統(tǒng)比測試其它軟件系統(tǒng)更復(fù)雜。你需要數(shù)據(jù)驗(yàn)證钉凌,模型的評(píng)價(jià)標(biāo)準(zhǔn)還有模型驗(yàn)證咧最。
- 部署:在ML系統(tǒng)中,部署不會(huì)像部署一個(gè)線下模型作為一個(gè)預(yù)測服務(wù)那樣簡單御雕。還要有一個(gè)可以重復(fù)訓(xùn)練模型的多階段流水線矢沿。并可以將數(shù)據(jù)科學(xué)家在部署之前手動(dòng)完成的步驟自動(dòng)化,以訓(xùn)練和驗(yàn)證新模型饮笛。
- 投產(chǎn):ML模型性能可能會(huì)降低咨察,這不僅是由于編碼不理想,還因?yàn)椴粩鄶U(kuò)充的數(shù)據(jù)配置文件福青。模型比傳統(tǒng)軟件系統(tǒng)更可能發(fā)生偏離摄狱。因此您需要跟蹤數(shù)據(jù)的匯總統(tǒng)計(jì)并監(jiān)控模型的在線性能,以便在值偏離您的預(yù)期時(shí)發(fā)送通知或回滾无午。
?ML系統(tǒng)和其他軟件系統(tǒng)在源代碼控制的持續(xù)集成媒役、單元測試、集成測試以及軟件模塊或包的持續(xù)交付也有一些顯著的差異:
- CI 不再只是測試和驗(yàn)證代碼和組件宪迟,還包括測試和驗(yàn)證數(shù)據(jù)酣衷、數(shù)據(jù)模式和模型。
- CD 不再是關(guān)于單個(gè)軟件包或服務(wù)次泽,而是一個(gè)可以自動(dòng)部署另一個(gè)模型預(yù)測服務(wù)的流水線穿仪。
- CT(持續(xù)訓(xùn)練)是機(jī)器學(xué)習(xí)系統(tǒng)獨(dú)有的特性席爽,包含自動(dòng)化重復(fù)訓(xùn)練和為模型提供服務(wù)。
6.3 APPDevOps
?客戶端涉及H5啊片、Android只锻、iOS,手工作業(yè)比較多紫谷,管理愈發(fā)困難齐饮。DevOps可以通過自動(dòng)化通過減少手工作業(yè),實(shí)現(xiàn)一站式構(gòu)建與運(yùn)維平臺(tái)笤昨。
- H5應(yīng)用的離線包構(gòu)建以及發(fā)布
- Android應(yīng)用的安裝包構(gòu)建
- IOS應(yīng)用的安裝包構(gòu)建
七祖驱、小結(jié)
?本文是本人整理總結(jié)的,內(nèi)容來源于網(wǎng)絡(luò)與書籍瞒窒,如果引用作者的文章捺僻,可以聯(lián)系我,我會(huì)在來源進(jìn)行備注根竿。
如果需要給我修改意見的發(fā)送郵箱:erghjmncq6643981@163.com
資料參考:《敏捷軟件開發(fā)》
轉(zhuǎn)發(fā)博客陵像,請(qǐng)注明,謝謝寇壳。