續交付概念的流行反映了業務部門對於更快交付速度的渴望和技術團隊對交付這一老大難問題的重視。從持續整合到持續交 付,ThoughtWorks一直在積極的實踐、思考、總結。這篇文章中我將分享ThoughtWorks一支Team Dev在這個領域的收穫和總結。
背景
我們的客戶是澳洲的房地產搜尋門戶,每年獨立訪問者近300萬(澳洲人口2000萬),年營收近3億美金,澳 洲61%的房產都在此網站展示。我們的團隊工作在商業地產、住宅、土地購置等與盈利息息相關的全產品線的核心系統上。
成就
2年前,與大多數“常規”項目一樣,部署和發布是一件費時費力、加班加點的活動。作為一家曆史超過10 年的互連網公司,已經有大量複雜的業務系統支援著線上業務的正常運轉,部署和發布任何一個功能都是牽一髮而動全身的複雜 活動。對我們的客戶來說快起來不是一件容易的事情,但它不得不快,因為競爭者在頻繁的進行商務工作,不快速的求變、求 新它將難以保持領先的市場地位。持續傳遞以及持續傳遞所支撐的持續創新能力是它必須建設的核心競爭力。
對於 ThoughtWorks,持續傳遞是增加項目進度的可見度,降低項目“最後一公裡”風險的重要工具。這樣,投資建設持續傳遞能力成 了合作雙方一拍即合的決定。經過了兩年的摸索與實踐,總接下來, 收穫主要有以下四點:
一鍵部署 :目前的部署流水線從提交開始,到自動運行各種驗證,再到最終的安裝、配置軟體可以做到全程無須人員幹預,最 終的部署過程可以在幾分鐘內自動完成。具備了快速部署,持續部署的能力,一天多次部署,一周多次發布就成了順利成章的事 情。
由離岸團隊執行部署和發布:中國團隊的成員大多是開發人員,對產品環境瞭解不足;分布式環 境讓中國的團隊沒有太多的機會從澳洲團隊身上學習如何部署和發布,這樣的內憂外困下,得出“由離岸團隊來執行部署和發布 風險太高”這個結論似乎是很自然的,然而隨著持續部署過程越來越熟練和成熟,我們發現上面的結論是與部署手段原始落後的 現狀息息相關的,一旦發布手段變的高明,由離岸團隊部署和發布的風險是完全可以接受的。
業務人員變得更 加敏捷:隨著部署肌肉的越來越發達,業務人員開始習慣了這樣一種對話方式,“唔,這個功能很不錯,我們發布出 去看看使用者是什麼反映吧?”,和以往仔細計劃、嚴格執行的風格相比,業務人員的決策過程變成了:
嘗試某功能
通過對響應資料的分析,理解功能的市場反應
決定繼續開發還是改變方向,不斷迴圈和迭代
通過功能頻繁上線,業務人員的思路和做事風格也變的更加敏捷。
業務團隊與技術團隊理解了部署和發布軟 件是兩個不同概念、兩件獨立的活動:
2年前,項目部署和發布的時間點從來都是高度統一的,部署結束髮布就結 束。團隊一直沒有意識到軟體的部署和發布是不同的概念和活動。事實上軟體部署是技術概念,包括了:
建立和管理應用所依賴的硬體軟體環境
把正確的軟體安裝到上述環境中
正確的配置產品,使其按照預想的方式運行
軟體發布則是業務概念,它包括了決定:
哪些業務功能應該讓使用者使用?
在什麼時間讓使用者使用?
讓哪些使用者使用?
必要的市場推廣,客戶、支援小組培訓是否就緒?
通過技術改造,大家明確了部署是一周進行多次,甚至一天進行多次的技術活動,而發布則嚴格與營運目標對齊,通常以幾 周為頻率。
最佳實務
團隊所取得的成就來自於對方法、工具和流程的摸索和應用,我們認為有三個實踐對於實施 持續傳遞是至關重要的:
功能開關(Feature Toggle):持續傳遞不僅僅意味著使用新工具、新方法。 它還意味著從設計和編碼階段就需要作出改變,功能開關是其中一項重要的設計實踐,它的目的是方便的開啟和關閉某個特性。 為什麼需要功能開關? 因為在持續傳遞的過程中,團隊會遇到下面的情況:
功能沒有就緒,還不能讓使用者使用
功能就緒,但是相關的商務活動(培訓,行銷活動等)沒有就緒,不能讓使用者使用
業務人員要求功能只開放給部分使用者
測試不充分導致的產品缺陷需要關閉功能
功能開關可以用於解決上述問題。它的具體實現多種多樣,我們在不同的情境中使用過:
灰階上線:功能部署上線但是把使用者可見的操作都屏蔽掉
檔案配置:通過設定檔決定某個功能是否對使用者可見或關閉
狀態資料:通過資料庫中的狀態值決定某個功能是否對特定使用者可見或關閉
編譯參數:再編譯過程中通過編譯參數決定某些特性開啟或者關閉
自動化(Automation):要想頻繁的部署、發布而且每次部署都不能出錯,是難以離開自動化過程的,我們 團隊的自動化部署流水線是這樣設計的:
本地測試通過後,開發人員提交代碼。