DevOps 3355
— 持續交付的三個基礎能力
— DevOps實踐指南的三步法
— 獨角獸專案的五大理念
— 加速的五組能力
為軟體的釋出建立一個可重複且可靠的過程
這個原則是我們寫這本書的一個目標:讓軟體釋出成為一件非常容易的事情。事實上,它的確應該是件很容易的事,因為在釋出之前,對釋出流程中的每一個環節,你都已經測試過數百次了。它就應該像單擊一個按鈕那麼容易。這種可重複性和可靠性來自於以下兩個原則:(1)幾乎將所有事情自動化;(2)將構建、部署、測試和釋出軟體所需的東西全部納入到版本控制管理之中。
歸根結底,軟體部署包括三件事:
❑ 提供並管理你的軟體所需要的執行環境,這包括硬體配置、所依賴的軟體、基礎設施以及所需的外部服務;
❑ 將你的應用程式的正確版本安裝在其之上;
❑ 配置你的應用程式,包括它所需要的任何資料以及狀態。
對於應用程式的部署,應該由版本控制系統中的全自動化過程來完成。透過儲存在版本控制系統或資料庫中的必要指令碼和狀態資訊,應用程式的配置也可以是一個全自動化過程。顯然,硬體是無法納入版本控制的,但利用廉價的虛擬化技術和像Puppet這樣的工具,這類支撐過程也可以全部自動化。
三步工作法:DevOps的基礎原則
《鳳凰專案》把三步工作法作為基礎的原則,並由此衍生出了DevOps的行為和模式。
圖1-4 三步工作法
(來源:Gene Kim在IT Revolution Press部落格上釋出的“三步工作法:DevOps的基礎原則”,訪問於2016年8月9日,http://itrevolution。com/the-three-ways-principles-underpinning-devops/)
第一步,實現開發到運維的工作快速地從左向右流動。為了最大程度地最佳化工作流,需要將工作視覺化,減小每批次大小和等待間隔,透過內建質量杜絕向下遊傳遞缺陷,並持續地最佳化全域性目標。
透過加快技術價值流的流速,縮短滿足內部或者外部客戶需求所需的前置時間,尤其是縮短程式碼部署到生產環境所需的時間,可以有效地提高工作質量和產量,並使企業具有更強的外部競爭力。
相關的實踐包括持續構建、整合、測試和部署,按需進行環境搭建,限制在製品數量,構建能夠安全地實施變更的系統和組織。
第二步,在從右向左的每個階段中,應用持續、快速的工作反饋機制。該方法透過放大反饋環防止問題復發,並能縮短問題檢測週期,實現快速修復。透過這種方式,我們能從源頭控制質量,並在流程中嵌入相關的知識。這樣不僅能創造出更安全的工作系統,還可以在災難性事故發生前就檢測到並解決它。
及時發現並控制這些問題,直到擁有有效的對策,可以持續地縮短反饋週期和放大反饋環,這是所有現代流程最佳化方法的一個核心原則,能夠創造出組織學習與改進的機會。
第三步,建立具有創意和高可信度的企業文化,支援動態的、嚴格的、科學的實驗。透過主動地承擔風險,不但能從成功中學習,也能從失敗中學習。透過持續地縮短和放大反饋環,不僅能創造更安全的工作系統,也能承擔更多的風險,並進行試驗幫助自己比競爭對手改進得更快,從而在市場競爭中戰勝他們。
作為第三步的一部分,我們能夠讓工作系統事半功倍,將區域性最佳化轉化為全域性最佳化。另外,不管是誰參與了工作,所有經驗都可以持續地積累,組織裡的人都可以相互借鑑彼此的經驗和智慧。
埃瑞克和瑪克辛走回桌旁。“有五大理念。”埃瑞克開始說。整個桌子的人都把注意力轉向了他。“我已經告訴過你們關於區域性性和簡單性的第一理念。我們需要做好設計,使系統以及構建它們的組織具有區域性性。此外,做任何事情都需要簡單性。
我們要把複雜性控制在內部,無論是在我們的程式碼中、組織中,還是在流程中。外部世界已經夠複雜的了,所以我們不能容忍複雜性存在於自己可以控制的事物中!我們必須讓我們的工作變得容易。”
瑪克辛坐下來,開啟她的筆記本計算機(很欣慰這次她記著帶來了),然後開始做筆記。
“第二理念是專注、流動和快樂。這是關於我們日常工作的感覺。我們的工作是以無聊和等待別人為我們做事為標誌嗎?我們是否盲目地在整體系統的一小塊上工作,只有在部署的時候才看到工作的結果,而這時一切都會崩潰,隨之而來的是救火、懲罰和筋疲力盡?還是說,我們小批次地工作——理想情況下是單件流——可以快速且持續地得到工作反饋?這樣我們就能保持專注和流動,不斷挑戰、學習、發現,精通自身領域,甚至變得快樂。”
他滿臉得意地環視著桌子:“這就是你們現在能得到的。等你們準備好了,我再分享另外三個理念。”
“你在開玩笑吧?”瑪克辛說,“你是在給我們表演尤達大師或宮城先生2的某種套路嗎?來吧,至少告訴我們其他理念的名字吧!”
2尤達大師和宮城先生分別出自電影《星球大戰》和《龍威小子》,都是良師的形象。——編者注
“你們真幸運,年輕人,我沒有時間爭論,酒吧裡都排起長隊了,我需要去處理。”他說,“第三理念是改進日常工作。反思豐田安燈拉繩教給我們的東西,必須重視對日常工作的改進,而不是日常工作本身。
第四理念是心理安全,我們要讓談論問題變得安全,因為解決問題需要預防,預防需要誠實,而誠實需要擺脫恐懼。在製造業,心理安全與人身安全同樣重要。最後,第五理念是以客戶為中心,我們要無情地質疑某樣東西對客戶是否真的重要,比如他們是否願意付錢給我們,還是隻對我們的職能筒倉有價值?”
埃瑞克喝完啤酒,微笑著說:“祝你們好運。下週見。”
“等等,等等,就這些?”瑪克辛說,但埃瑞克已經走了。瑪克辛低頭看著快速記下的筆記:
第一理念——區域性性和簡單性
第二理念——專注、流動和快樂
第三理念——改進日常工作
第四理念——心理安全
第五理念——以客戶為中心
研究揭示了24個關鍵能力,它們驅動著軟體交付效能的改進,並經由統計證明其重要性。我們把這些能力歸為5個類別:
• 持續交付
• 架構
• 產品與流程
• 精益管理與監控
• 文化