使用 GitLab/GitHub/Gerrit + Zadig 實現主幹開發主幹釋出(含位元組飛書實踐)
一個完整的產品交付過程涉及到分支策略、團隊的協作流程、基礎設施建設等方方面面,有些團隊交付效率之所以低下,往往是因為其中的某個環節出了短板,高效的協作需要結合
專案所處的階段、
產品交付的頻率、
團隊成員的習慣和素養等來制定適合自己團隊的方案。
在團隊日常協作過程中,選擇一個合適的分支策略尤為重要,在此基礎上團隊角色之間的協作過程才可以被定義和執行,生產過程才能高效運轉,從而產品功能才可高質量交付。
主流的分支策略有:
- 主幹開發,主幹釋出
- 主幹開發,分支釋出
- 分支開發,主幹釋出
- GitFlow
- ...
本文主要介紹“主幹開發、主幹釋出”分支策略在 Zadig 上的實踐過程。以下實踐過程主要以 Gerrit 程式碼源為例,其他型別程式碼源比如 GitLab、GitHub、Gitee 同樣適用。
什麼是主幹開發、主幹釋出
開發程式碼直接提交到主幹分支,經過測試驗證後,使用主幹分支進行打版上線。
優勢:
- 分支管理簡單
- 開發易上手,操作簡單,不易出錯
- 程式碼合併衝突少
- 適合高頻交付
成功關鍵點:
- 主幹分支時刻保持可釋出的狀態,開發自測階段/CR 過程/主幹分支驗證過程需要嚴格把控
- 未開發完成的功能程式碼,不能帶入將要釋出的版本里或者實現功能開關,將未完成的功能隱藏
團隊協作流程詳解
本地開發&自測 -> 提交 Pull Request 到
主幹分支(main) -> 程式碼審查 & 合併程式碼 -> 手動驗證功能/補充自動化測試用例 -> 基於
主幹分支交付版本
團隊協作流程
團隊協分工
飛書基於 Zadig 的實踐過程
早期飛書的使用場景,其中一個團隊有上百個微服務,服務定義使用原生的 K8s YAML 方式,使用 Gerrit 作為程式碼管理和人工稽核工具來實現主幹開發主幹釋出。具體過程如下:
- 提交程式碼變更:修改程式碼,提交 MR ,生成 change-id
- 人工審查:新增/通知程式碼審查人;審查人可以多次 submit 審查,通過一個 transection 提交,通過審查,可以打分 -2 到 2;
- 機器審查:非阻塞式自動觸發 Zadig 工作流執行驗證:構建->部署->測試;
- 主幹反饋:工作流跑完後會傳送 IM 通知,並執行 Gerrit 打分校驗結果 score +1-1
系統可以配置審查規則,比如達到 2 分自動合併,自動化測試比較多的情況可以這樣。
- 基於主幹釋出上線
上述
過程 3 依賴測試環境,容易造成環境資源的浪費和審查過程等待的情況,飛書團隊選擇使用 Zadig Webhook
動態分配空閒環境 的能力,既可以合理利用環境資源又不阻塞機器審查過程。
服務配置提取出不同的環境變數來
區分整合環境 ,根據人員的配置情況,建立 4 個同構環境,日常開發只需要提交程式碼並建立 Gerrit change,自動觸發工作流做程式碼的構建部署和自動化測試。
- 開發 A 提交一個更新 service-a 的 PR1,自動觸發 Zadig 工作流 -> 構建 service-a ->更新 ENV1 的 service-a -> 針對 ENV1 執行測試指令碼
- 開發 B 提交一個更新 service-b 的 PR2,自動觸發 Zadig 工作流 -> 構建 service-b ->更新 ENV2 的 service-b -> 針對 ENV2 執行測試指令碼
- PR1、PR2 合併 Master 後分別觸發工作流 -> 構建 service-a、構建 service-b -> 更新所有的環境,保證所有環境和主幹一致。
動態分配空閒環境實踐
飛書後續採用 GitLab 管理程式碼,關於 GitLab 的分支模型和更多實踐可參考文件:
位元組跳動飛書為什麼選擇 Zadig 實現主幹開發、主幹釋出 | 部落格。
Demo 演示實踐
-
專案基本搭建過程
-
更多配置
- 按需建立多個環境,具體參考 配置多套環境 | Zadig 文件
- 工作流配置 Webhook 觸發器:環境的負載均衡 | Zadig 文件
- 工作流配置 IM 通知:工作流 | Zadig 文件
- 多個服務共享構建:構建 | Zadig 文件
日常研發使用過程
開發工程師
- 程式碼提交併自動驗證:提交程式碼 -> 在 Gerrit 上建立 Change -> 自動觸發 Zadig 工作流的執行(構建 -> 動態選擇空閒環境進行部署 -> 自動化測試 )
- 人工程式碼審查:Reviewer 使用 Gerrit 作為程式碼審查工具並打分,根據打分結果來判斷程式碼是否可以合併
系統可以配置 rules,比如達到 2 分自動合併
測試開發工程師
- 在 Zadig 上配置管理測試指令碼: 測試 | Zadig 文件
- 針對更新後的環境驗證新功能,為新功能補充測試用例
釋出工程師
- 基於主幹已驗證的程式碼進行版本釋出
- 釋出完成後執行工作流將所有環境中的服務版本與主幹保持一致
專案/企業管理人員
檢視企業專案整體的執行狀況:
資料概覽 | Zadig 文件
分析專案各個環節的變化過程以及效能短板:
效能洞察 | Zadig 文件
後續將推出更多分支策略以及團隊協作流程相關實踐專題文章,敬請期待...
「其他文章」
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出
- Zadig v1.13.0 相信開放的力量,工作流連通一切價值
- 飛書影片會議端到端整合測試工程實踐經驗總結 - Zadig 應用案例
- 在解決了 2961 個使用者反饋後,我做出了這樣的改變...
- 基於 Ingress Controller 在叢集外訪問 Zadig 自測環境(最佳實踐)
- iMile 利用 Zadig 多雲環境周部署千次,跨雲跨地域持續交付全球業務
- 穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)
- 穩!上千微服務接入 Zadig 的最佳姿勢(K8s YAML 篇)
- Zadig 洞態 IAST:讓安全溶於持續交付
- TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
- 00後雲工程師用 Zadig 為企業研發開源節流
- Zadig 構建究竟有何強大?一起來實踐
- 妙盈科技全面實施 Zadig 擁抱雲原生
- Zadig SonarQube,為開發過程安全保駕
- Zadig v1.12.0 推出 VS Code 外掛,全面支援 GitOps ,好工具就要到最後一公里
- 鈦動科技:我們的 Zadig 落地之路
- 眾樂邦就這樣與 Zadig 結緣了