DevOps是一種文化,不是角色!
軟件無(wú)處不在。在如今的世界里,每個(gè)主流公司/組織都和軟件開(kāi)發(fā)息息相關(guān),并且公司需要向軟件一樣運(yùn)作。更快且更敏捷,同時(shí)保證安全性和可靠性,這樣的要求***的強(qiáng)烈。這樣的壓力通常體現(xiàn)為項(xiàng)目被取消或者被暫停。這正是DevOps嘗試解決的問(wèn)題:如何讓企業(yè)內(nèi)部的開(kāi)發(fā),運(yùn)維和其他組織協(xié)作,達(dá)成一系列共同的目標(biāo),更快更可靠地向客戶和終端用戶交付軟件?支持DevOps項(xiàng)目的核心技術(shù)實(shí)踐包括讓開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)為軟件交互標(biāo)準(zhǔn)化一系列常見(jiàn)的敏捷流程和工具。這通常包括:
- 自動(dòng)化的配置管理,測(cè)試和應(yīng)用部署;
- 應(yīng)用程序和基礎(chǔ)架構(gòu)代碼的版本控制,助力協(xié)作和回滾;
- CI(持續(xù)集成)自動(dòng)化代碼構(gòu)建,并且通過(guò)更頻繁,風(fēng)險(xiǎn)更低的版本帶來(lái)更快的反饋和迭代。
DevOps是文化的轉(zhuǎn)變,是關(guān)于每個(gè)人如何以正確的方式參與到工作當(dāng)中。在軟件定義的世界里,出現(xiàn)了一系列問(wèn)題。
我們?nèi)绾巫屇承〇|西快速進(jìn)入生產(chǎn)環(huán)境?我們?cè)趺粗朗褂玫氖?**方案呢?我們能多快地使用改進(jìn)和更新?
DevOps試圖通過(guò)盡早地在交互型流程里涉及到所有人從而讓大家都參與進(jìn)來(lái)。達(dá)到DevOps的成功需要首先理解核心業(yè)務(wù)優(yōu)勢(shì)。企業(yè)能夠更快地前進(jìn),下線時(shí)間更短,并且安全問(wèn)題更少。
Mike Dilowrth,敏捷和DevOps轉(zhuǎn)型***,最近說(shuō):
DevOps是一種文化,不是角色!整個(gè)公司都需要參與到DevOps里才能成功。
DevOps需要高級(jí)領(lǐng)導(dǎo)層的支持,也需要和最終產(chǎn)品相關(guān)的所有人的參與,而不僅僅是開(kāi)發(fā)和運(yùn)維部門。
我之前讀過(guò)一篇Puppet的白皮書(shū),關(guān)于如何構(gòu)建高效的IT團(tuán)隊(duì)。其中開(kāi)始部分就提出了一些有意思的理論和實(shí)踐,這里我想分享給大家。
DevOps和行業(yè),公司規(guī)模以及技術(shù)環(huán)境密切相關(guān)。至少,在企業(yè)中領(lǐng)導(dǎo)過(guò)成功DevOps轉(zhuǎn)型的IT經(jīng)理們,總結(jié)時(shí)都認(rèn)為,DevOps指的是持續(xù)學(xué)習(xí)和改進(jìn)的過(guò)程,而不是某種最終狀態(tài)。
構(gòu)建業(yè)務(wù)用例
和很多IT***一樣,你想要的不僅僅是交付***的多的產(chǎn)品和服務(wù),而且還要更快更好地交付——并且沒(méi)有可靠性和安全性的問(wèn)題。DevOps看上去確實(shí)會(huì)有所幫助!但是……在真正開(kāi)始之前,你就已經(jīng)開(kāi)始讓團(tuán)隊(duì)產(chǎn)生懷疑了。
怎么才能為DevOps制定清晰,令人信服的場(chǎng)景,可以降低擔(dān)憂,并且將懷疑轉(zhuǎn)化為成功呢?
上面的問(wèn)題是個(gè)良好的開(kāi)始。構(gòu)建業(yè)務(wù)場(chǎng)景是成功的DevOps轉(zhuǎn)型的重要部分(特別是在大型企業(yè)里)。在一場(chǎng)有名的TED演講里,Simon Sinek認(rèn)為偉大***和積極變化的催化劑的共同點(diǎn)是:
讓人們信服的不是***在干什么,而是為什么要這么干。
在構(gòu)建企業(yè)對(duì)DevOps轉(zhuǎn)型的認(rèn)同方面,也是同樣的道理。簡(jiǎn)單宣布“我們要做DevOps”并不會(huì)讓大家真正開(kāi)始。相反,你需要令人信服地回答這樣的問(wèn)題“為什么?為什么是現(xiàn)在?”。你的所有客戶都希望速度更快并且不犧牲系統(tǒng)的可靠性和穩(wěn)定性——在傳統(tǒng)企業(yè)里這個(gè)目標(biāo)直接自相沖突。開(kāi)發(fā)人員的任務(wù)是盡可能快地讓新特性上生產(chǎn)環(huán)境。同時(shí),衡量運(yùn)維團(tuán)隊(duì)的指標(biāo)是在線時(shí)間和系統(tǒng)性能。因此這讓團(tuán)隊(duì)之間變得對(duì)立而不是并肩作戰(zhàn)。因此,生產(chǎn)環(huán)境的部署一直被延遲和錯(cuò)誤所困擾,部署發(fā)生的頻率比業(yè)務(wù)實(shí)際需要的頻率低很多。
讓Dev支持DevOps
更快的部署和反饋回路正是開(kāi)發(fā)人員想要的:代碼可以更快地從他們的筆記本交付到用戶手里,持續(xù)交付帶來(lái)快速的迭代和改進(jìn)。在早期pilot項(xiàng)目里跟蹤變更時(shí)間的改進(jìn)是個(gè)不錯(cuò)的開(kāi)始:
- 代碼從開(kāi)發(fā)的筆記本到生產(chǎn)環(huán)境需要多久?
- 跟之前的時(shí)間相比,有什么改進(jìn)么?(你是不是自動(dòng)化了更多的構(gòu)建流程?你有沒(méi)有降低需要部署的ticket數(shù)量?)
- 現(xiàn)在和以前相比多久需要一次部署?
- 部署有沒(méi)有變得更為容易并且更快了呢?
讓Ops支持DevOps
當(dāng)開(kāi)發(fā)人員和運(yùn)維人員緊密工作時(shí),運(yùn)維人員會(huì)受益??梢詮耐馐褂猛ㄓ玫墓ぞ哝滈_(kāi)始,讓兩個(gè)組的人采用相同的工具一起工作,在開(kāi)發(fā)中集成,測(cè)試和部署基礎(chǔ)架構(gòu)代碼。這樣可以讓開(kāi)發(fā)人員更為積極地參與到部署和問(wèn)題定位中,進(jìn)一步打破以前的障礙,同時(shí)提高速度和可靠性。跟蹤運(yùn)維團(tuán)隊(duì)關(guān)心的度量矩陣將給整個(gè)團(tuán)隊(duì)帶來(lái)好處——包括Dev和QA:
- 在線/下線時(shí)間:是不是能夠更好地達(dá)到服務(wù)級(jí)別的要求?下線時(shí)間減少了么?
- 變更失敗率:故障是不是變少了?
- 恢復(fù)的平均時(shí)間:故障發(fā)生時(shí),回滾到已知的最近的好狀態(tài),這樣的回滾時(shí)間是不是減少了?
從小處著手,持續(xù)成長(zhǎng)
那么,如何開(kāi)始度量這些DevOps的影響,并且支持自己的業(yè)務(wù)場(chǎng)景呢?從有特定任務(wù)和項(xiàng)目的小地方開(kāi)始。Terri Potts (Raytheon的杰出工程師&軟件技術(shù)總監(jiān))認(rèn)為這樣的方案非常高效。
你無(wú)法一下子改變整個(gè)程序,但是可以讓一些子團(tuán)隊(duì)開(kāi)始嘗試正確的方向。從外部引入一些人來(lái)自動(dòng)化一些測(cè)試或者build,會(huì)很有用,同時(shí)給團(tuán)隊(duì)一些實(shí)際的例子。
Raytheon讓他的一個(gè)團(tuán)隊(duì)從每個(gè)月兩次集成轉(zhuǎn)變?yōu)橐粋€(gè)晚上運(yùn)行27次,這是自動(dòng)化了build后的結(jié)果。在單個(gè)項(xiàng)目里這是一個(gè)很大的成功,這也成為了Portts如何在企業(yè)內(nèi)孵化DevOps的典型示例。
從小處開(kāi)始,文化轉(zhuǎn)型也要跟上——不要期望一開(kāi)始就能讓所有人都信服DevOps。實(shí)際中,在特定項(xiàng)目的小型組織內(nèi)贏得大家的支持,就贏得了會(huì)在公司其他地方幫助宣傳DevOps的大使們,這會(huì)帶來(lái)乘數(shù)效應(yīng)。隨著業(yè)務(wù)場(chǎng)景的構(gòu)建,還需要清醒認(rèn)識(shí)到要達(dá)成長(zhǎng)期DevOps成功的可能會(huì)遇到的障礙。