本文主要介紹微服務架構下,單應用獨立開發、集成測試、持續交付最佳實踐。
背景信息
在微服務架構下,應用服務獨立開發和發布,適合使用分支開發模式。該模式下,一個需求對應一個 feature分支,多個需求合并到release分支進行集成測試和發布。期間可能遇到以下問題:
痛點1:如何快速為需求創建feature分支?
痛點2:如何將多feature分支合并到release分支?
痛點3:如何避免feature分支漏測,發布到線上引起生產環境故障?
痛點4:當feature分支測出嚴重的問題,如何做到不影響其他需求正常發布?
痛點5:當feature分支提交測試后,誤操作發布上線,如何及時的解決并更改相應需求狀態,便于相關同學跟蹤進度?
解決方案
云效應用交付平臺 AppStack 提供變更持續交付解決方案,核心概念包括
應用:軟件的最小發布單元,聚合代碼、環境、版本等資產,通過一個流程統一交付。
變更:變更是對應用的一次特性改變(引入新的特性或改變已有特性),源于需求,終于交付。通常一個需求或任務對應一個變更,對應一個 feature 分支。
研發流程:應用完成一次變更的過程和約束,包括開發、測試、發布上線的完整流程,由多個階段的多條流水線承載,依次在不同環境進行測試、構建、部署,最終審批通過后發布到生產環境。
應用負責人,您需要編排應用構建和部署流程,并通過流水線工具實現自動化。同時,定義應用生產發布準則,以規范研發流程,降低發布風險。
作為應用負責人
以下以 spring-boot 應用“圖書館管理系統”為例,開發并發布“圖書借閱”、“圖書歸還”、“圖書續借”三個需求。
新建應用
進入應用交付AppStack首頁,新建應用時,輸入應用名稱,并選擇 應用模板。
添加代碼源
,新建服務連接類型云效Codeup,選擇代碼倉庫與默認分支。
配置研發流程
(研發流程配置操作步驟變更持續交付模式。)
研發流程分為三個階段:
測試階段:由Java單元測試、Java代碼掃描、構建和部署測試環境。
預發階段:由構建和部署預發環境。
生產階段:由構建、生產發布審批、部署生產環境、合并主干和關閉變更。
生產發布審批通過后,部署生產環境。驗證通過后,將release分支合并回主干master,并自動關閉相關變更。
設置變更集成方式和準入規則
變更集成方式和準入規則僅開通高級版可見。
各階段選擇添加變更集成方式,在運行階段流水線時,可以選擇多個變更分支集成到release分支進行構建部署驗證。
測試階段:無準入規則。
預發階段:準入規則為:測試階段-執行結果等于成功,避免未經過測試驗證的分支進入預發。
生產階段:準入規則為:測試階段-執行結果等于成功,預發階段-執行結果等于成功,避免未經預發驗證的分支進入生產階段。
作為一線開發
“需求1:圖書借閱功能”、“需求2:圖書歸還功能”、“需求3:圖書到期續借功能”三個需求分別分配給開發小張、小明、小強開發。
第1步,為一個需求新建一個變更拉一個 feature 分支
小張創建一個變更「變更1-實現圖書借閱功能」,選擇新建分支輸入 feature001,則可自動為該需求拉取一個分支(解決上述痛點1)。依次類推,小明創建一個變更「變更2-實現圖書歸還功能」,自動新建分支feature002。小強創建一個變更「變更3-實現到期續借功能」,自動新建分支feature003。
第2步,開發代碼提交到 feature 分支
小張開發好圖書借閱相關代碼后,提交代碼到feature001上,小明開發圖書歸還相關代碼后,提交代碼到feature002分支上。
第3步,選擇變更集成,部署測試環境驗證
小張和小明,一借一還,需要一起部署到測試環境進行聯調驗證。進入應用研發流程頁,選擇變更1和變更2一起集成測試,云效會自動將 feature001 和 feature002 合并到自動生成的 release/xxx_n 分支(解決上述痛點2),使用該 release 分支做構建,并部署環境。環境部署成功即可進行測試驗證。
第4步,提交變更進行預發布
測試環境驗證通過,進入預發階段,選擇變更1和變更2進行集成,勾選自動合并上一階段集成的分支,會自動生成新的 release/xxx_m 集成分支,自動合并上一階段 feature001、feature002、release/xxx_n 分支,使用新的 release/xxx_m 分支構建并部署預發環境。預發部署成功后即可進行預發驗證。
此時若在預發階段選擇變更1、變更2、變更3一起集成,則經過變更準入卡點時會校驗失敗,因為變更3沒有在測試環境部署驗證過,即保證了沒有經過測試驗證的需求不可發布(解決上述痛點3)。
變更3因沒有測試驗證通過,不滿足發布條件,團隊本次決定圖書續借功能不上線,只上線變更1和變更2,則可再次運行預發階段流水線,將變更3踢出集成區,退出本次發布(解決上述痛點4)。
第5步,提交變更進行生產發布
預發驗證通過后,即可進入生成發布階段。選擇待發布的變更1和變更2,運行生產流水線,發布審批通過后,即可部署生產環境。生產環境部署完成,可配置自動關閉變更,并將發布 release/xxx_k 分支合并入主干 master,至此即完成了一次完整的需求發布上線。
作為業務產品同學
變更發布完成了,我作為PD同學怎么知道需求發布了呢?云效AppStack和Projex工作項聯動,變更發布完成后需求狀態自動置為已發布,PD同學可及時看到需求進展。
配置方式:進入Projex項目設置,選擇工作項與變更狀態聯動模板,設置變更狀態為已發布時,需求狀態自動置為已完成