DevOps實(shí)施收益價(jià)值
云計(jì)算團(tuán)隊(duì) 2020-03-16
對(duì)于我們完全自主研發(fā)的DevOps支撐平臺(tái)實(shí)際上在前面很多文章我都強(qiáng)調(diào)過(guò),簡(jiǎn)單理解就是將DevOps最佳實(shí)踐,包括研發(fā)過(guò)程管理,持續(xù)交付和技術(shù)運(yùn)營(yíng)全部融入到DevOps支撐平臺(tái),同時(shí)底層開發(fā)基于微服務(wù)開發(fā)框架,組件運(yùn)行依托在容器化PaaS平臺(tái)上,形成一個(gè)完整的整體。
對(duì)于DevOps支撐平臺(tái)實(shí)施收益和價(jià)值,今天再?gòu)臉I(yè)務(wù)和管理層容易理解的視角來(lái)進(jìn)行下闡述。
1. 企業(yè)研發(fā)管理過(guò)程的標(biāo)準(zhǔn)化和規(guī)范化
注意,在DevOps實(shí)施過(guò)程中,我們會(huì)協(xié)助企業(yè)進(jìn)行研發(fā)管理過(guò)程的規(guī)范化和流程化,不論是傳統(tǒng)的研發(fā)過(guò)程管理模式,還是敏捷開發(fā)思路,都需要對(duì)研發(fā)過(guò)程進(jìn)行標(biāo)準(zhǔn)化和流程化,再進(jìn)一步的自動(dòng)化。這里面涉及到最基本的開發(fā)框架,開發(fā)規(guī)范,配置管理,變更和缺陷管理,測(cè)試管理,版本發(fā)布等諸多關(guān)鍵過(guò)程域,而這些在我們進(jìn)行DevOps支撐平臺(tái)實(shí)施的時(shí)候會(huì)協(xié)助企業(yè)進(jìn)行這方面的優(yōu)化和改進(jìn)。
2. 企業(yè)研發(fā)資產(chǎn)的可視化
在DevOps里面我們會(huì)強(qiáng)調(diào)研發(fā)和運(yùn)維一體化,研發(fā)和質(zhì)量管理一體化,這些都沒(méi)有問(wèn)題。但是DevOps有一個(gè)關(guān)鍵就是本身是完全包括覆蓋了傳統(tǒng)的持續(xù)交付和持續(xù)集成最佳實(shí)踐的。即整個(gè)研發(fā)生命周期過(guò)程應(yīng)該進(jìn)一步的可視化,同時(shí)通過(guò)微服務(wù)架構(gòu)設(shè)計(jì)和模塊拆分,進(jìn)一步的實(shí)現(xiàn)短周期迭代開發(fā)。
迭代開發(fā)最終交付的用戶可以使用的功能,而不是中間的半成品。但是如果半成品的輸出過(guò)程不可視,如何確保最終的功能輸出沒(méi)有問(wèn)題?
不論是甲方企業(yè),還是軟件企業(yè)本身,都需要對(duì)研發(fā)過(guò)程可視化,即對(duì)研發(fā)過(guò)程的關(guān)鍵中間節(jié)點(diǎn)做到完全可控,可視,而這里面最重要的就是做到中間輸出結(jié)果本身的可驗(yàn)證。注意在整個(gè)DevOps流水線作業(yè)中,增加的代碼入庫(kù)和靜態(tài)檢查,構(gòu)建,自動(dòng)化的單元測(cè)試等都是確保這些中間件節(jié)點(diǎn)可視,確實(shí)研發(fā)檢入的代碼是完整并可以編譯通過(guò)的。
從整個(gè)項(xiàng)目一開始研發(fā)資產(chǎn)就是可視的,那么最終研發(fā)完成后資產(chǎn)本身也是完整和可視的。研發(fā)資產(chǎn)應(yīng)該是屬于企業(yè)資產(chǎn)而不是個(gè)人資產(chǎn),對(duì)于甲方企業(yè)來(lái)講,研發(fā)資產(chǎn)的交付應(yīng)該是在整個(gè)項(xiàng)目或研發(fā)過(guò)程中持續(xù)交付,而不是最終項(xiàng)目完成后一次性交付,只有這樣甲方對(duì)乙方的IT管控能力才能夠提升。
3. 協(xié)助企業(yè)進(jìn)行微服務(wù)架構(gòu)轉(zhuǎn)型的關(guān)鍵支撐
在傳統(tǒng)企業(yè)進(jìn)行IT架構(gòu)轉(zhuǎn)型,或者說(shuō)轉(zhuǎn)向微服務(wù)架構(gòu)后,帶來(lái)的一個(gè)關(guān)鍵問(wèn)題就是微服務(wù)模塊會(huì)越來(lái)越多,模塊之間的接口越指數(shù)級(jí)增長(zhǎng)。這就導(dǎo)致我們?cè)谶M(jìn)行模塊構(gòu)建,模塊部署,單元測(cè)試等工作的時(shí)候耗費(fèi)大量的人力。而DevOps支撐平臺(tái)本身就集成了持續(xù)交付和集成各種關(guān)鍵工具集,通過(guò)平臺(tái)可以高效自動(dòng)化的完成代碼檢查,編譯,構(gòu)建,打包,部署,環(huán)境遷移等各類工作。極大的節(jié)約人力投入并提升過(guò)程效率。
原來(lái)傳統(tǒng)模式下你部署一個(gè)業(yè)務(wù)系統(tǒng)可能感覺(jué)不到大的工作量,但是實(shí)施微服務(wù)架構(gòu)后一個(gè)業(yè)務(wù)系統(tǒng)可能已經(jīng)被拆分為了10多個(gè)微服務(wù)模塊,那么要部署這些微服務(wù)模塊,要準(zhǔn)備應(yīng)用服務(wù)器,要進(jìn)行打包部署工作量都會(huì)指數(shù)級(jí)增長(zhǎng),而這些完全可以由DevOps支撐平臺(tái)來(lái)幫你完成,同時(shí)在設(shè)計(jì)好流水線作業(yè)模板后,所有過(guò)程都是自動(dòng)完成,而且在執(zhí)行過(guò)程中可以做到完全可視,可管控。
在實(shí)施微服務(wù)架構(gòu)的時(shí)候,我前面談到過(guò)兩點(diǎn),一個(gè)就是前面的容器化技術(shù)支撐和持續(xù)集成自動(dòng)化,一個(gè)就是后續(xù)的運(yùn)維監(jiān)控能力要跟上。這兩個(gè)能力跟不上,那么微服務(wù)架構(gòu)實(shí)施將由于企業(yè)本身的IT信息化成熟度不足導(dǎo)致大量的問(wèn)題。
記得在幾年前自己的一個(gè)朋友,原來(lái)是做工程設(shè)計(jì)咨詢的,但是在規(guī)劃設(shè)計(jì)項(xiàng)目中逐漸發(fā)現(xiàn)了有不少的信息化軟件開發(fā)需求,剛開始的時(shí)候走的全部外包但是發(fā)現(xiàn)不好管理和持續(xù)。因此開始著手建立自己的軟件開發(fā)隊(duì)伍,更我說(shuō)起這個(gè)事的時(shí)候差不多也有了10多個(gè)人的軟件開發(fā)團(tuán)隊(duì)。
記得是有一個(gè)晚上,朋友突然找我讓我出去聊下有急事,過(guò)去后才知道是由于內(nèi)部管理或利益分配的諸多原因,在這里不方便細(xì)問(wèn),這個(gè)開發(fā)負(fù)責(zé)人逐步要離職走準(zhǔn)備去單獨(dú)干,而且可能還準(zhǔn)備把幾個(gè)核心開發(fā)都帶走。由于我朋友本身也不是技術(shù)和IT出身,遇到這種事情本身還是一抹黑找不到對(duì)策,找到我的原因無(wú)礙乎是問(wèn)我這邊的技術(shù)人員或團(tuán)隊(duì)能不能先把他那邊的系統(tǒng)和開發(fā)工作先承接過(guò)去下。
前期沒(méi)有完整的研發(fā)流程,需求文檔也不完善,而且在離職的時(shí)候提交的文檔,代碼是否完備這些即使是有經(jīng)驗(yàn)的技術(shù)人員去驗(yàn)證本身也存在相當(dāng)?shù)碾y度,到了最后離職談判階段實(shí)際上我朋友本身已經(jīng)處于相當(dāng)被動(dòng)的地位。在這個(gè)時(shí)候來(lái)談工作交接或找人接替本身也為時(shí)已晚。而實(shí)際上具體分析個(gè)人理解實(shí)際上這個(gè)問(wèn)題很多非技術(shù)背景的領(lǐng)導(dǎo)都會(huì)遇到,造成的原因主要是:
1. 核心研發(fā)資產(chǎn),包括需求設(shè)計(jì)文檔,源代碼往往掌控在關(guān)鍵的一個(gè)人手里面,或者干脆無(wú)文檔。
2. 研發(fā)過(guò)程不透明,研發(fā)資產(chǎn)沒(méi)有顯性化,他人很難短期接手。
而要解決這個(gè)問(wèn)題,個(gè)人理解至少需要從幾個(gè)方面來(lái)考慮,第一就是我們常說(shuō)的研發(fā)團(tuán)隊(duì)劃分,崗位角色設(shè)置上面要考慮分離,關(guān)鍵崗位角色要考慮有備份和AB角,能夠相互替代。第二就是我們說(shuō)的研發(fā)過(guò)程流程改進(jìn),研發(fā)資產(chǎn)的可視化。
而對(duì)于第二點(diǎn),實(shí)施DevOps平臺(tái)本身就是一個(gè)很好的支撐,即研發(fā)資產(chǎn)可視,過(guò)程可視,你每天新產(chǎn)生的代碼都要檢入,并進(jìn)行相關(guān)的代碼檢查和自動(dòng)化測(cè)試,整個(gè)持續(xù)集成和自動(dòng)化構(gòu)建確保了進(jìn)入到我們配置管理庫(kù)的代碼是編譯通過(guò)的。其次,我們自動(dòng)構(gòu)建完成的部署包本身就是推送給測(cè)試人員進(jìn)行測(cè)試的部署包,中間不需要開發(fā)人員去插手或增加小動(dòng)作,那么測(cè)試人員測(cè)試通過(guò)的版本,一定就是當(dāng)前代碼已經(jīng)實(shí)現(xiàn)的版本。
即在整個(gè)DevOps持續(xù)集成過(guò)程中,實(shí)現(xiàn)了研發(fā)資產(chǎn)的持續(xù)落地可視化,這個(gè)可視化不僅僅是整個(gè)研發(fā)版本的可視,更是中間各個(gè)階段的可視化,即使你團(tuán)隊(duì)所有人員都離職,我們也應(yīng)該能夠確保當(dāng)前研發(fā)資產(chǎn)庫(kù)里面的代碼能夠自動(dòng)化構(gòu)建完成并形成當(dāng)前的應(yīng)用版本。代碼當(dāng)前是全的沒(méi)有遺漏,而且代碼完全和當(dāng)前功能對(duì)應(yīng)。
還有就是,在實(shí)施SOA項(xiàng)目的過(guò)程中,我們也經(jīng)常和甲方溝通,當(dāng)時(shí)有一個(gè)甲方就提到一個(gè)關(guān)鍵點(diǎn),當(dāng)要給完整的業(yè)務(wù)系統(tǒng)招標(biāo)選擇了要給供應(yīng)商來(lái)定制開發(fā)后,在項(xiàng)目驗(yàn)收完成后雖然提交了相關(guān)的文檔,相關(guān)的源代碼,但是發(fā)現(xiàn)后續(xù)的運(yùn)維甲方根本無(wú)法承接。包括乙方提供的源代碼本身都無(wú)法編譯通過(guò),即使能夠編譯通過(guò)構(gòu)建出來(lái)的版本功能也和當(dāng)前生產(chǎn)環(huán)境功能有明顯差異。甲方如果本身不是專業(yè)的IT類公司實(shí)際上很難在驗(yàn)收的時(shí)候發(fā)現(xiàn)這些問(wèn)題,也就是說(shuō)最終驗(yàn)收你得到的文檔,代碼等內(nèi)容實(shí)際上完全無(wú)法支撐甲方運(yùn)維。
而這個(gè)問(wèn)題和前面一個(gè)問(wèn)題很類似,就甲方來(lái)說(shuō)如何加強(qiáng)對(duì)開發(fā)商的管控,如何確保開發(fā)商定制的系統(tǒng)版本和當(dāng)前的研發(fā)文檔,源代碼資產(chǎn)等是時(shí)刻同步的。如何確保最終驗(yàn)收的研發(fā)交付文檔,代碼就是和當(dāng)前生產(chǎn)環(huán)境運(yùn)行的系統(tǒng)版本是一致的?
如果所有的事情都到了驗(yàn)收的時(shí)候才去處理,那么往往為時(shí)已晚,說(shuō)得直白一點(diǎn)對(duì)應(yīng)乙方提供給甲方的業(yè)務(wù)系統(tǒng)對(duì)甲方來(lái)說(shuō)就是一個(gè)黑盒子,里面的東西甲方完全搞不懂,只有乙方能夠進(jìn)行后續(xù)運(yùn)維和定制維護(hù)。也就是甲方不得不承認(rèn)間接被乙方綁架的事實(shí)。
我們都知道最終的研發(fā)資產(chǎn)要能夠移交,要能夠可交維,但是里面的關(guān)鍵點(diǎn)究竟在哪里?
簡(jiǎn)單來(lái)說(shuō)就是研發(fā)資產(chǎn)的可交維必須是一個(gè)在一開始就持續(xù)增量不間斷進(jìn)行的過(guò)程,一個(gè)是按階段進(jìn)行持續(xù)的交付,一個(gè)就是按業(yè)務(wù)系統(tǒng)的功能點(diǎn)進(jìn)行持續(xù)集成交付。在整個(gè)過(guò)程中會(huì)分很多小的階段點(diǎn),在這些階段點(diǎn)都需要植入相應(yīng)的自動(dòng)化檢查和測(cè)試手段,確保最終入庫(kù)的資產(chǎn)質(zhì)量是滿足的。整個(gè)持續(xù)集成過(guò)程在一開始配置完成后,研發(fā)人員就不應(yīng)該過(guò)多的介入,而應(yīng)該是流水線自動(dòng)進(jìn)行,確保中間沒(méi)有人為不確定性因素的加入。
我們?cè)诮o甲方推DevOps絕對(duì)不是簡(jiǎn)單的解決持續(xù)集成的問(wèn)題,而是真正將研發(fā)過(guò)程管理的經(jīng)驗(yàn),包括研發(fā)資產(chǎn)的持續(xù)可視化融入到整個(gè)DevOps平臺(tái),實(shí)現(xiàn)真正的研發(fā)資產(chǎn)可控,過(guò)程可控,降低對(duì)單個(gè)人,乃至單個(gè)團(tuán)隊(duì)的強(qiáng)依賴。
我們?cè)谕艱evOps平臺(tái),會(huì)過(guò)度強(qiáng)調(diào)了整個(gè)自動(dòng)化,持續(xù)集成流水線過(guò)程,強(qiáng)調(diào)研發(fā)和測(cè)試的協(xié)同,而忽視了研發(fā)和運(yùn)維過(guò)程的協(xié)同。而研發(fā)和運(yùn)維的協(xié)同是整個(gè)DevOps的另外一個(gè)關(guān)鍵內(nèi)容,研發(fā)的系統(tǒng),包括每一個(gè)功能點(diǎn)應(yīng)該是做到從一開始就是可運(yùn)維的,具備運(yùn)維屬性。
一個(gè)系統(tǒng)的可運(yùn)維,本身有一個(gè)潛臺(tái)詞就是系統(tǒng)可移交。而對(duì)于甲方來(lái)說(shuō)也可以很名正言順的強(qiáng)調(diào)是為了整個(gè)研發(fā)管理過(guò)程的規(guī)范化,自動(dòng)化和研發(fā)效率提升來(lái)推進(jìn)DevOps平臺(tái)工作。下面一篇將從完全云化角度來(lái)進(jìn)一步思考DevOps平臺(tái)的實(shí)施價(jià)值。