內(nèi)容來源:2017年8月18日谈秫,DevOps時(shí)代聯(lián)合發(fā)起人張樂在“DevOpsDays 【主會(huì)場】”進(jìn)行《DevOps 道法術(shù)器及全開源端到端部署流水線 2.0發(fā)布》演講分享掩驱。IT 大咖說(WeChat_ID:itdakashuo)作為獨(dú)家視頻合作方,經(jīng)主辦方和講者審閱授權(quán)發(fā)布绎签。
閱讀字?jǐn)?shù):4497?| 4分鐘閱讀
觀看嘉賓演講視頻回放及PPT,請點(diǎn)擊:http://t.cn/EwBQxt9
嘉賓簡介
摘要
DevOps獨(dú)立顧問、DevOps時(shí)代聯(lián)合創(chuàng)始人張樂為我們帶來DevOps 道法術(shù)器及端到端部署流水線V2.0的分享员串。
VUCA新常態(tài)
在移動(dòng)互聯(lián)網(wǎng)時(shí)代和即將到來的人工智能時(shí)代,我們所處的商業(yè)格局和企業(yè)生態(tài)充滿了易變性壕曼、不確定性苏研、復(fù)雜性和模糊性,企業(yè)的創(chuàng)新能力依賴于能夠頻繁地從真實(shí)用戶那里得到對商業(yè)假設(shè)的有效驗(yàn)證腮郊,勝出者的特點(diǎn)是擁有快速交付價(jià)值摹蘑、靈活應(yīng)對變化的能力。
IT的技術(shù)革命
IT行業(yè)一直都在不斷地自我迭代轧飞、持續(xù)演進(jìn)衅鹿,我們正在經(jīng)歷一場IT的技術(shù)革命。
從應(yīng)用架構(gòu)的角度过咬,多年前開發(fā)軟件大渤,可能就是一個(gè)單體式的應(yīng)用,所有的東西全部在運(yùn)行一個(gè)進(jìn)程里面掸绞。后來我們有了分層架構(gòu)泵三,把展示層、邏輯層衔掸、數(shù)據(jù)層做了很好的分離烫幕。近兩年我們在提微服務(wù)的架構(gòu),希望每個(gè)服務(wù)能夠單一職責(zé)敞映,服務(wù)之間能夠很好的解耦较曼,每個(gè)服務(wù)都能夠獨(dú)立地設(shè)計(jì)開發(fā)、測試和上線振愿。
部署和打包的模式也發(fā)生了很大的變化诗芜。從基于物理機(jī)部署到基于虛擬機(jī),再到現(xiàn)在很多應(yīng)用運(yùn)行在容器里埃疫。我們交付過程的產(chǎn)出已經(jīng)不再滿足于交付一個(gè)可工作的軟件伏恐,而是希望每次交付都是一個(gè)可正常運(yùn)行的系統(tǒng),這是一個(gè)本質(zhì)上的變化栓霜。
從應(yīng)用的基礎(chǔ)設(shè)施來講翠桦,我們原來關(guān)注的是數(shù)據(jù)中心,到后來我們更多關(guān)注的是主機(jī)托管胳蛮,現(xiàn)在我們更關(guān)注如何在云上把應(yīng)用正常销凑、高效、穩(wěn)定的運(yùn)行起來仅炊。
更為重要的斗幼,軟件交付管理的模式也在發(fā)生著很多的變化。早在上個(gè)世紀(jì)六抚垄、七十年代蜕窿,那個(gè)時(shí)候提出的軟件工程方法谋逻,是用一種結(jié)構(gòu)性、系統(tǒng)化桐经、重管控的流程和方法去控制整個(gè)軟件交付的過程毁兆,后來到了互聯(lián)網(wǎng)時(shí)代,以敏捷化阴挣、迭代式气堕、增量化的交付逐步成為主流,這會(huì)讓軟件交付過程更快畔咧、更靈活茎芭。到現(xiàn)在我們講 DevOps,是希望通過研發(fā)和運(yùn)維/運(yùn)營的融合誓沸,在保證質(zhì)量的前提下進(jìn)一步提升交付效率骗爆。
所有以上這些維度構(gòu)成了一場IT的技術(shù)革命。
DevOps已成為發(fā)展趨勢
從Gartner的IT成熟度曲線圖可以看出蔽介,DevOps已經(jīng)跨越了概念認(rèn)知的頂點(diǎn)摘投,逐步向深化應(yīng)用去發(fā)展。也就是說它在概念上得到了認(rèn)同虹蓄,需要考慮的問題就是如何更高效地落地實(shí)施犀呼。
在今年發(fā)布的《2017年DevOps現(xiàn)狀調(diào)查報(bào)告》中顯示,根據(jù)幾年的調(diào)查數(shù)據(jù)統(tǒng)計(jì)趨勢發(fā)現(xiàn)薇组,DevOps團(tuán)隊(duì)比例已經(jīng)從2014年的16%提升到2015年的19%外臂,2016年提升到22%,今年已經(jīng)達(dá)到了27%律胀,也就是說已經(jīng)成為事實(shí)上的技術(shù)趨勢宋光。
DevOps強(qiáng)調(diào)為業(yè)務(wù)目標(biāo)服務(wù)
DevOps不是技術(shù)噱頭和工程師的工具箱,更需要面向業(yè)務(wù)目標(biāo)炭菌,助力業(yè)務(wù)成功罪佳。DevOps需要有效應(yīng)對VUCA 挑戰(zhàn),高效黑低、高質(zhì)量交付價(jià)值赘艳,快速、靈活響應(yīng)變化克握。
談到DevOps落地蕾管,曾經(jīng)碰到不少朋友更多關(guān)注是使用什么樣的工具去實(shí)現(xiàn)DevOps。有些人關(guān)注自動(dòng)化菩暗,包括自動(dòng)化測試和自動(dòng)化部署掰曾;有人說DevOps是組織文化,重點(diǎn)是開發(fā)和運(yùn)維的協(xié)同停团;也有人說DevOps要關(guān)注小批量的交付旷坦。這些關(guān)注點(diǎn)都對掏熬,但是可能不夠全面。
我把之前對DevOps的理解和實(shí)踐經(jīng)驗(yàn)塞蹭,整理成一個(gè)體系化的實(shí)施框架:『DevOps道法術(shù)器』孽江。
“道”是目標(biāo)讶坯、價(jià)值觀番电,對價(jià)值的定位×纠牛快速交付價(jià)值漱办,靈活響應(yīng)變化,這是從價(jià)值層面的追求婉烟,或者是從第一性原理的角度來講娩井,我們做這個(gè)事情最終目標(biāo)是什么;
“法”是實(shí)現(xiàn)價(jià)值觀的戰(zhàn)略似袁、方法洞辣,這個(gè)層次的主要思路是全局打通敏捷開發(fā)和高效運(yùn)維。
“術(shù)”是戰(zhàn)術(shù)昙衅、技術(shù)扬霜,最佳實(shí)踐的層次,我們要系統(tǒng)化的應(yīng)用有效的方法而涉、合適的技術(shù)著瓶,很多最佳實(shí)踐幫助我們實(shí)現(xiàn) DevOps 。
“器”是工具層次啼县,主要思路是用工具提升效率材原,將復(fù)雜的問題簡單化。因?yàn)樯厦娴膶哟斡辛撕芎玫募夹g(shù)和方法季眷,我們最終要把它落地余蟹、固化到工具平臺上,并且希望實(shí)現(xiàn)整個(gè)軟件交付流程端到端相互融合和貫通子刮。
道客叉、法、術(shù)话告、器自上而下是系統(tǒng)思考的層次兼搏,自下而上是解決問題的層次。我認(rèn)為 DevOps 的規(guī)劃和實(shí)施可以用這四個(gè)層次來概括沙郭。
一佛呻、道
應(yīng)用性能、拓?fù)涞谌浇M件病线;資源使用吓著;異常堆棧鲤嫡;數(shù)據(jù)聚合、分析報(bào)警绑莺;自定義業(yè)務(wù)暖眼。
常用監(jiān)控手段
首先是 “道” 的層次,主要目標(biāo)是快速交付價(jià)值和靈活響應(yīng)變化纺裁。談到敏捷诫肠,談到 DevOps,可能第一個(gè)訴求就是要快速交付價(jià)值欺缘。在互聯(lián)網(wǎng)的時(shí)代栋豫,交付的速度非常關(guān)鍵。原來的瀑布模型需要等到最后一個(gè)環(huán)節(jié)實(shí)施完成才向用戶交付價(jià)值谚殊,而敏捷和DevOps 倡導(dǎo)小批量丧鸯、增量式的交付價(jià)值,這就使交付價(jià)值的速度嫩絮、面向市場的頻率得到大幅提升丛肢。
除此之外,還要關(guān)注什么剿干?還要關(guān)注端到端的交付價(jià)值蜂怎,這才是真正的交付價(jià)值。如果僅僅在開發(fā)怨愤、測試環(huán)節(jié)做局部的敏捷優(yōu)化派敷,而沒有考慮到后續(xù)的多服務(wù)集成場景,以及每次迭代后發(fā)布和運(yùn)維的場景撰洗,這樣就沒有真正做到端到端的價(jià)值交付篮愉,所以我們需要做的是打通整個(gè) IT 交付的全鏈條。
在價(jià)值交付這個(gè)層次差导,我們最終希望達(dá)成一個(gè)目標(biāo)试躏,就是通過 DevOps 打造一條高度自動(dòng)化的 IT 服務(wù)供應(yīng)鏈,能夠快速设褐、高質(zhì)量地交付用戶的價(jià)值颠蕴。 DevOps 創(chuàng)始導(dǎo)師 Patrick 先生來華時(shí)給了我們一些啟示,如何做到開發(fā)和運(yùn)維的有效融合助析。
第一個(gè)維度是自動(dòng)化犀被,比如通過基礎(chǔ)設(shè)施即代碼的方式,將交付擴(kuò)展到生產(chǎn)的環(huán)境外冀;
第二個(gè)維度是度量寡键,從運(yùn)維側(cè)暴露一些日志,監(jiān)控?cái)?shù)據(jù)等相關(guān)信息給到開發(fā)側(cè)雪隧,形成有效的反饋西轩;
第三個(gè)維度是文化员舵,建立責(zé)任共擔(dān)的機(jī)制,促進(jìn)合作藕畔;
第四個(gè)維度是共享马僻,將運(yùn)維側(cè)獲取到的知識注入到開發(fā)側(cè),比如把安全需求注服、監(jiān)控需求等非功能需求韭邓,加入到產(chǎn)品的Backlog中;
這樣從四個(gè)維度將開發(fā)和運(yùn)維之間做更好的融合祠汇,以上這些是 “道” 的層次仍秤。
二熄诡、法
“法” 的層次可很,我們關(guān)注如何全局打通敏捷開發(fā)和高效運(yùn)維。這里面談到很多的方法凰浮,我認(rèn)為 DevOps 是一個(gè)集大成者我抠,是很多優(yōu)秀的方法的集合體,但是要更關(guān)注全局的整體優(yōu)化而不僅是某個(gè)局部的優(yōu)化袜茧。
左側(cè)這張圖來自DevOps Master的知識體系菜拓,主要講敏捷、持續(xù)交付笛厦、精益纳鼎、ITSM這些方法的適用范圍和相互關(guān)系。
敏捷重點(diǎn)關(guān)注從需求裳凸、開發(fā)到測試的范疇贱鄙;持續(xù)交付重點(diǎn)關(guān)注工程實(shí)踐的范疇;在運(yùn)維側(cè)還是應(yīng)用 ITSM 的方法姨谷,但是重點(diǎn)要關(guān)注如何將流程自動(dòng)化并提升效率逗宁;另外還有一個(gè)貫穿始終的精益思想,它是以上諸多方法的基石梦湘。
右側(cè)這張圖來自Jenkins的創(chuàng)始人KK瞎颗,很好的說明了敏捷、持續(xù)集成捌议、持續(xù)交付哼拔、持續(xù)部署這些不同方法的效用和邊界在哪里,以及各種方法之間的區(qū)別和相互融合關(guān)系瓣颅。
下面是?DevOps 結(jié)構(gòu)化方程模型倦逐,這個(gè)模型也非常有價(jià)值。
實(shí)施 DevOps 的過程中弄捕,我們經(jīng)常會(huì)關(guān)注很多具體方法或技術(shù)的實(shí)現(xiàn)僻孝,比如測試和部署的自動(dòng)化导帝、分支模型、持續(xù)集成穿铆、架構(gòu)解耦您单、自組織團(tuán)隊(duì)等等,還包括精益產(chǎn)品管理相關(guān)的內(nèi)容荞雏,比如小批量虐秦、實(shí)驗(yàn)、反饋等凤优。
但是往往我們忽略了最左邊的一個(gè)部分悦陋,這個(gè)部分是變革領(lǐng)導(dǎo)力。什么是變革領(lǐng)導(dǎo)力筑辨?
我的理解是從一個(gè)領(lǐng)導(dǎo)者的層面俺驶,如何構(gòu)造一個(gè)良好的氛圍,助力 DevOps 的變革棍辕。比如說需要在安全空間范圍內(nèi)倡導(dǎo)免責(zé)的文化暮现,鼓勵(lì)改進(jìn)冒險(xiǎn)的行為。其實(shí)所有的改進(jìn)要從領(lǐng)導(dǎo)力的層面建立一個(gè)良好的氛圍楚昭,并滲透到團(tuán)隊(duì)當(dāng)中栖袋,當(dāng)資源具備、氛圍建立起來抚太,再和具體的技術(shù)塘幅、方法、實(shí)踐引入相匹配尿贫,相輔相成电媳、共同作用才能把 DevOps 有效推進(jìn)下去。
以上就是“法” 的層次帅霜,希望能給大家一些啟示匆背,但這部分還是偏理論一些,那么下面我們看看具體的技術(shù)和實(shí)踐身冀。
三钝尸、術(shù)
“術(shù)” 的層次的主要思路是系統(tǒng)的應(yīng)用各類技術(shù)、指導(dǎo)原則和最佳實(shí)踐搂根。這個(gè)層次涵蓋的內(nèi)容就非常多了珍促,我們可以通過一張圖來展示。
首先把相關(guān)技術(shù)和最佳實(shí)踐分為管理維度和工程維度兩個(gè)部分剩愧。
管理維度主要關(guān)注管理的范疇猪叙,針對軟件生命周期不同的階段有不同的技術(shù)和實(shí)踐。比如目標(biāo)確定階段,可以應(yīng)用精益畫布和影響地圖的實(shí)踐穴翩;在版本的確定階段犬第,可以應(yīng)用用戶故事地圖和敏捷迭代管理的相關(guān)實(shí)踐;在迭代實(shí)施階段我們可以應(yīng)用精益看板芒帕、每日站會(huì)歉嗓、敏捷度量(燃盡圖、累積流圖背蟆、散點(diǎn)圖...)等實(shí)踐鉴分,以上這些技術(shù)和實(shí)踐可以幫助我們管理整個(gè)軟件研發(fā)的過程。
在工程維度也對應(yīng)了很多的技術(shù)和實(shí)踐带膀,包括配置管理志珍、自動(dòng)化測試、持續(xù)集成垛叨、持續(xù)交付伦糯、灰度發(fā)布、持續(xù)監(jiān)控等等点额。以上這些組成了我們?“術(shù)” 的層次舔株,下面我們找一些重點(diǎn)的做下介紹莺琳。
3.1管理維度
在敏捷中 Scrum 模型已經(jīng)非常普遍还棱,我這里不詳細(xì)闡述。
這里重點(diǎn)關(guān)注敏捷度量惭等,比如用燃起圖度量整體進(jìn)度珍手;用累積流圖度量各個(gè)階段累積處理的需求數(shù)量,以及它們隨時(shí)間的變化趨勢辞做,可以從中分析出前置時(shí)間琳要、交付速率的數(shù)據(jù),以及協(xié)作模式的改進(jìn)機(jī)會(huì)秤茅;通過散點(diǎn)圖可以關(guān)注整個(gè)的交付過程中稚补,平均前置時(shí)間、收斂趨勢框喳,以及通過對離群點(diǎn)的分析课幕,找到改進(jìn)的機(jī)會(huì)。在敏捷項(xiàng)目管理過程中五垮,善用數(shù)據(jù)度量乍惊,是持續(xù)改進(jìn)的前提。
3.2工程維度
下面來看一下工程維度的內(nèi)容放仗,首先是持續(xù)交付框架润绎。
關(guān)于持續(xù)交付框架,我個(gè)人之前也分享過很多了,主要思路是以建設(shè)可靠莉撇、可重復(fù)的持續(xù)交付流水線為核心呢蛤,配合以相關(guān)實(shí)踐和技術(shù)的導(dǎo)入,讓整個(gè)軟件交付過程實(shí)現(xiàn)高度的自動(dòng)化和自助化棍郎。
除了框架的指導(dǎo)顾稀,我們還有很多最佳實(shí)踐的集合。
上圖是持續(xù)交付的光譜圖坝撑,發(fā)布頻率從100天發(fā)布一次到一天發(fā)布多次静秆,所采用的分支模型、測試模式巡李、系統(tǒng)架構(gòu)抚笔、發(fā)布模式、基礎(chǔ)設(shè)施和數(shù)據(jù)庫的管理模式侨拦,都會(huì)有很多的實(shí)踐需要變化殊橙。
我認(rèn)為作為我們從業(yè)者來講,是非常好的指導(dǎo)和參考狱从,如果希望將交付的頻率變得更快膨蛮,穩(wěn)定性變得更高,需要把這些實(shí)踐調(diào)整和落地季研。
四敞葛、器
“器” 是指工具的層次,工具需要把上面層次提到的方法与涡、實(shí)踐固化和落地惹谐。工具通用需要考慮很多維度,比如說管理維度驼卖、工程維度氨肌、基礎(chǔ)設(shè)施維度,而最重要的酌畜,是要把這些工具做很好地聯(lián)通和整合怎囚。
今年4月份,我發(fā)布了全開源端到端交付流水線的1.0的版本桥胞。當(dāng)時(shí)的目標(biāo)是希望從社區(qū)的角度恳守,我們做一個(gè)解決方案提供給大家,從而幫助大家通過開源工具更好的把 DevOps 實(shí)現(xiàn)和落地埠戳。那么效果怎樣呢井誉?當(dāng)時(shí)我們做了一個(gè)演示視頻,介紹整個(gè)的流水線過程和實(shí)現(xiàn)細(xì)節(jié)整胃。這個(gè)視頻到現(xiàn)在已經(jīng)累計(jì)播放超過4.5萬次颗圣,我們覺得還是很欣慰的,希望社區(qū)能夠幫助大家做一些事情。
當(dāng)然在岂,我們也是在不斷迭代和自我改進(jìn)的奔则,我們在 V1.0 版本的基礎(chǔ)上進(jìn)一步完善和優(yōu)化,現(xiàn)在提出端到端交付流水線 V2.0 版本蔽午。
新的版本希望覆蓋更多場景易茬,包括APP發(fā)布流程,支持多種語言及老,支持一些友好的商業(yè)工具抽莱,支持Mesos& Marathon 的部署,支持虛擬主機(jī)自動(dòng)化配置骄恶,支持一鍵式自動(dòng)進(jìn)行工具間的集成等食铐,也希望能夠適配更多的場景下的不同需求。
可以看到比上一個(gè)版本做了很多更新和完善僧鲁,適配更復(fù)雜的場景虐呻。在需求側(cè),我們引入 Jira 做敏捷項(xiàng)目管理寞秃,依然通過Gitlab進(jìn)行代碼托管斟叼,采用 Feature 分支的研發(fā)模型。使用 Jenkins 和 BlueOcean 做流水線的編排和展示春寿,流水線分為提交階段朗涩、驗(yàn)收階段、準(zhǔn)生產(chǎn)階段和生產(chǎn)階段堂淡。
在流水線中集成很多工具馋缅,包括 Maven 、 JUnit 绢淀、Sonar、Selenium瘾腰、Jmeter皆的、PACT、Appium等蹋盆,鏡像管理使用 Harbor 费薄,但也支持其他鏡像倉庫。
部署上支持Ansible或SaltStack栖雾,容器集群可以兼容 K8S 或Mesos + Marathon楞抡。所以這也是一個(gè)解決方案,希望能幫助大家更好地通過工具落地 DevOps 析藕。
今天我們講的是 DevOps 的道召廷、法、術(shù)、器四個(gè)層次竞慢,希望大家做 DevOps 規(guī)劃和實(shí)施不僅關(guān)注工具先紫、實(shí)踐,更要關(guān)注它的業(yè)務(wù)價(jià)值筹煮,自上而下的推動(dòng)遮精,自下而上的解決問題。
今天的分享就到這里败潦,謝謝大家本冲!