隨着企業業務對軟件系統日益依賴,IT管理與研發模式也隨之對“敏態”模式產生了需求,也就是今天時常提起的DevOps。提升效率,是DevOps實踐的核心內容之一。就讓我們來一起從軟件生命週期的業務流與作業流,探討DevOps實踐效率提升的方向與方法吧。
DevOps之“流”分析
軟件工程將軟件的生命週期定義爲問題定義、需求分析、軟件設計、程序編碼、軟件測試、運行維護等過程,無論是對於傳統模式、敏捷模式還是DevOps模式,軟件生命週期過程基本一致,如下圖所示。
圖一:軟件生命週期
軟件生命週期各個過程也組成了軟件工程的“業務流”,而在不同團隊採用相應地開發模式中,具體執行的開發及相關的活動,我們則成爲“作業流”。
DevOps實踐中,最主要改進的內容,就是對於這些 “作業流”的活動進行“關停並轉”,從而實現整體與局部上對於效率的提升。
這些作業,也就是需要開展的活動,可以分爲以下幾類:
人與人的互動
這類活動交互的雙方均爲自然人,如業務需求收集,活動的特點是具備高度的不規則與不規律性。
人與機的互動
這類活動交互的一方爲自然人,一方爲依託於計算機的程序,如編碼活動、人工審覈/審批等,活動的特點是人的活動必須依循計算機相關主題的規則,部分活動可以抽取爲規範化的過程。
機與機的互動
這類活動的特點是交互的雙方都是依託於計算機的程序,如編譯構建、自動化測試,活動的過程高度規範化。
不同的作業類型,在效率提升的優化中,需要採用的方法各有不同。
DevOps效率提升之協作
協作的本質是在不同的主體之間進行快速、有效的信息共享,從而進一步協調各主體進行步調一致、有序的工作執行,實現整體上的一致性與順暢性,協作是DevOps實踐中效率提升的重要方向和內容之一。
DevOps實踐中的協作更多需要是從軟件生命週期整體系統化考慮與設計,協作設計上面主要包括以下兩個方面。
1. 信息共享
傳統的模式中,相關業務信息僅共享於各階段內部,而在DevOps實踐中,則更強調信息的跨階段共享,面向產品的全生命週期,共享信息包括:
業務類信息
即業務目標、業務背景、業務需求、業務限制等信息。
執行類信息
即軟件開發、編譯、測試、部署等執行的相關信息,如開始時間、結束時間、執行時長、執行操作記錄等。
反饋類信息
即各步驟、階段執行的信息反饋,如需求拆分反饋、任務執行反饋、代碼掃描結果、測試結果、發佈驗證結果等。
DevOps時間的信息共享,需爲以上信息提供統一的信息管理與分析平臺。對於代碼編寫之前的階段提供如敏捷協同的工作協同管理模塊,以記錄需求、任務分配、需求完成進展等信息,對於代碼編寫之後的階段,則提供相對完整的執行記錄信息以及必要的通知信息,以構建及時的反饋。
2. 協作調度
協作調度是DevOps協作實踐中另外一項關鍵內容。通過工具平臺的驅動,實現對於“機與機的活動”全自動協作調度,對於“人與機的活動”簡化協作調度,對於“人與人的活動”事件驅動協作調度,進而實現優化協作調度的效率,提升協作效果。
全自動協作調度
全自動的協作調度主要是通過DevOps平臺的流水線引擎實現,通過流水線編排的實現指定作業流自動執行,執行過程中自動完成不同階段的信息交互,過程無需人工參與。
簡化的協作調度
簡化的協作調度也是通過DevOps平臺的流水線引擎實現,在流水線作業流中編排需要人工干預的節點,但僅需要人工給出通過/終止等簡單的指令型信息即可。
基於事件的協作調度
基於事件驅動的協作調度,主要是用於“人與人的活動”,也可以用於“人與機的活動”,其通過通知、待辦等事件方式,實現精準的信息共享與推送,驅動協作的下游方快速接受和推進事務工作。
DevOps實踐中的協作調度的效果可以通過研發效能來進行初步的評估與衡量,通過衡量,我們可以較爲清晰的獲知哪個階段的協調調度是關鍵阻礙點或可以進一步優化。
DevOps效率提升之自動化
自動化是DevOps的核心理念,也是效率提升的最重要手段。通過DevOps工具平臺,實現軟件過程自動化以及軟件過程的支撐工作自動化。
1. 軟件過程自動化
軟件過程自動化是指在軟件的開發、測試、部署等過程中,引入自動化的手段,從而實現快速的軟件質量檢查,以及軟件應用發佈。
開發過程自動化
開發過程的自動化主要針對源代碼掃描、編譯構建、製品歸檔、報告歸檔等環節實現自動化。
源代碼掃描包括採用商用/開源工具,從代碼的規範、缺陷、複雜度、重複率等方面進行掃描和質量檢測。
編譯構建包括針對服務器端、移動端等不同編譯構建類型的支持,如Maven、Gradle、Node.js等編譯構建方式支持。
製品/報告歸檔包括對於二進制包、文檔、鏡像的歸檔和存儲支持。
通過流水線引擎,實現以上內容的自由、可視化編排,以及按需執行。
測試過程自動化
測試過程的自動化主要針對軟件測試中的單元測試、接口測試、穩定功能的UI測試、測試數據自動生成和清理等過程。
包括測試任務的組織、測試腳本的執行、執行結果的自動統計等。
部署過程自動化
部署自動化是指針對軟件的部署發佈過程,包括數據庫更新、應用部署、灰度/滾動發佈、回滾等過程。
2. 過程支撐自動化
軟件過程支撐主要是指面向軟件工程過程的支撐,實現自動化包括:
編譯構建環境自動化
編譯構建環境包括基於DevOps平臺的自管理編譯構建環境,按需生成編譯構建環境,編譯構建完成後自動銷燬,以及特定編譯構建環境的快速接入等。
測試環境自動化
測試環境自動化是指自動化測試執行所需的能力環境,如接口/UI測試腳本所需的執行環境,可以根據測試任務的需要,實現測試環境的彈性伸縮自管理。
環境部署自動化
環境部署自動化是指對於開發、測試、生產等所需要的基礎環境,可以根據流水線自動完成環境的使用前的生成、使用後的回收等,實現資源即代碼,無需人工參與。
在DevOps實踐中,通過大量的過程及支撐自動化,可以極大的減少開發、測試、運維等工作的人工參與時間,降低人工成本,並能實現人工無法完成的工作,例如快速對10000臺服務器上的應用進行更新。但前期的建設需要涉及的技術點較多,成本也較爲巨大,如何建設落地自動化,除了考慮效率之外,還需着重考慮DevOps平臺的自主可控與可持續發展等方面,
DevOps效率提升之持續優化
持續優化,是DevOps效率提升的第三個主要方面,也是踐行DevOps理念的重要實踐。持續優化需要解決優化什麼、如何優化等問題。這些問題的解決,需要應用DevOps精益分析的理念實踐。
精益分析,本質就是對數據的統計、分析與挖掘。
1. 數據獲取
精益分析所涉及的數據應從需求提出到用戶訪問形成一個端到端閉環。數據的獲取需要從業務系統本身以及支撐業務系統的DevOps平臺兩個方向獲取。早期可以以DevOps平臺相關數據的獲取爲主要來源,後續可持續集成非DevOps平臺以及來自業務系統埋點獲取的數據。在整個過程中,需要做到數據的及時性、準確性與完整性。
2. 數據分析
數據分析需要有明確的目標和針對性,如針對業務需求提出到上線的平均週期、開發返工趨勢等,通過數據分析,可以快速找到當前影響效率的關鍵點,從而實現針對性的改善。
3. 數據呈現
數據呈現即爲數據應用,數據呈現可以採用兩種方式進行。
協同管理
將數據獲取/分析的結果,在DevOps的協同管理平臺實時的反饋和呈現,從而推動PO/開發團隊/干係人等根據反饋信息快速推進效率優化,通過量變引發質變,通過團隊內自我優化的方式實現效率的提升。
度量分析
針對於與效率相關的重點指標,通過可視化大屏等方式,進行專項的度量分析,並在管理與項目團隊共享指標信息以及指標的變化趨勢,通過全局監督的方式推進效率的提升。
結論
文化上的協同打破了流程與部門的屏障,共享了信息,協作了調度;過程中的自動化消除了重複性的工作,降低人爲風險;業務系統與DevOps平臺的數據支持精準提供優化的方向。DevOps之所以能爲企業提升效率在於DevOps的實踐實現軟件生命週期的業務流與作業流的一致與順暢。
作者:黃全中
———— / END / ————
想要建立對DevOps的基礎概念,可以參考:
想了解藍鯨實踐DevOps的理解,可以參考: