在星雲科技,我們使用 Zadig 實現多環境並行釋出,上千次周部署

語言: CN / TW / HK

Zadig on Github

Zadig on Gitee

與 Zadig 結緣

星雲科技的核心成員來自貝貝集團,貝貝同樣是一家科技型企業,在過去幾年的發展中已經形成了一套自己的研發體系,在 Zadig 的發展早期(當時產品還叫 KodeRover),我們就有過接觸,不過因為當時機會還不成熟,暫時沒有引入。但 Zadig 團隊及其產品已經給我們留下了很深的印象,因此當我們在星雲科技搭建研發體系時,首先想到的就是結合 Zadig 來構建我們的持續交付系統。

趙文路, 維 Leader,科技

 

 

業務發展迅猛、挑戰重重

業務初期,採用單體應用 + 前後端分離,通過 Docker 先把業務執行起來,部分業務無法使用 Docker 的,直接採用 jar 包啟動的方式,先保證應用正常執行來滿足業務訴求。後來增加了 Docker-Compose,初步實現運維程式碼化工作。
 
隨著業務逐步發展壯大,Docker-Compose + 多虛擬機器的方式越來越力不從心,面臨諸多挑戰:
  1. 核心模組逐步拆分為多個服務,每個服務都需要高可用部署,並調控例項數量
  2. 涉及到前後端、負載均衡、日誌收集、編譯部署多個環節、多個伺服器,維護環境和編譯過程需要耗費非常多的時間和精力
  3. 多套測試和預發環境管理成本高,由於配置的差異性、服務數量更多、複雜度也更高,導致運維工作量比生產環境還要多
 

持續交付痛點分析

有痛點就要解決,我們仔細分析了下各個階段的痛點和關鍵需求:
  1. 編譯構建:從原始碼編譯到製品、映象,傳統方式很難滿足異構、多版本的編譯構建環境。
  2. 部署釋出:多環境並行釋出,每週有近千次的釋出部署。
  3. 測試環境:測試環境需要支援多個專案的並行開發,配置方面儘可能統一以降低維護複雜度,但又要保證獨立性,滿足不同情況的測試驗證。
  4. 預發環境:預發與生產環境,除了流量入口不同,其它都要與生產環境保持一致,以便進行上線前的迴歸驗證。
  5. 研發效率:支援開發工程師自助釋出,多種除錯方式,使開發成果得到及時反饋,提高研發效率。
 

技術方案選型思考

我們調研市面上的大部分解決方案, Zadig 作為一款開源分散式持續交付產品,為開發者提供雲原生執行環境,支援開發者本地聯調、微服務並行構建和部署、整合測試等,具備比較明顯的產品特性優勢
  1. 提高交付效率:經過簡單配置,即可自動生成高併發工作流,高效執行構建、部署等任務
  2. 輕鬆應對突發專案任務:一套服務配置,一鍵快速(10 分鐘左右)生成多套隔離的測試環境
  3. 版本交付完整資訊資料流,讓每次釋出都有記錄可查
 
對比同類產品,Zadig 產品優勢:
  1. 能夠將原始碼管理、CI/CD、K8s(或雲平臺容器服務)、映象管理、統一賬戶登入(LDAP)等工具集成於統一平臺,完成從程式碼到上線到維護的全流程操作
  2. 有大廠落地經驗,有解決複雜場景經驗
  3. 版本迭代快,通過社群和實時聊天群等多種渠道收集解答問題,並將改進快速迭代至下一版本
  4. 相較於其他同類產品,更易上手,配置更簡單,維護成本低
 
值得一提的是 Zadig 團隊,也相當給力:
  1. 產品團隊直接通過運維、研發等真實使用人員瞭解使用者痛點,通過線下線上(微信群、Slack 群)等方式實時溝通實時解答,也方便使用者及時瞭解產品的動向,深入瞭解產品的設計理念,有助於更好的使用 Zadig 。
  2. 使用中遇到問題,能夠與產品開發人員直接溝通,問題響應快,解決及時。
  3. 產品團隊人員對於雲原生、微服務、DevOps、CI/CD 等概念都有非常深的理解都是行業內非常資深的專家,且都能在第一線耐心幫助使用者,解決問題 -> 收集問題 -> 形成產品功能迭代入下個版本,形成良性迴圈。
  4. 真正的解決使用者痛點,解決實際問題:雲原生時代持續整合、持續交付、多版本多環境管理、開發測試運維協作問題等。

如何落地 Zadig ?

星雲目前的主打產品是“星雲有客.私域一體化智慧營銷”解決方案。基於企業微信,打通全渠道資料,精準引流獲客,資料化圈層運營,助力企業搭建私域會員營銷閉環。
 
經過前期技術調研,並與 Zadig 人員多次深入交流,發現不管是產品理念還是團隊實力都與我們的預期設想深度契合。而我們的核心產品“星雲有客”正需要這樣一種平臺來支撐快速發展的業務,於是接下來便是如何落地的問題。
由於 Zadig 已將原始碼管理、編譯構建環境、執行環境、以及其中個性化的配置都已考慮在內,對於我們來講只需將原發布配置、釋出指令碼、環境變數等資訊合理的放入 Zadig 各個功能模組即可完成從原始碼到上線完整流程。
 
以下是 SaaS 系統的程式碼構建過程,採用單分支模型:主幹開發、主幹釋出(分支管理相關無縫切換)
 
多語言多框架異構系統:我們主要的後端開發框架是 Java Spring Boot,但有些早期系統是 PHP 和 Java 的其它框架,導致構建和執行環境並不完全一致,這也對工具系統提出了更高的要求。
針對此種情況,Zadig 提供靈活的指令碼工具,能夠適應各種個性化釋出。
 
藉助 Zadig 的能力,我們實現了開發自助釋出、多專案並行、多測試環境等功能,快速實現了一個高效的持續交付系統,提高了產品功能迭代的效率,優化研發效能。
 

使用情況總結

當前星雲的 SaaS 產品都已完全接入 Zadig,通過 Zadig 管理了兩個 K8s 叢集,共 5 個環境(3 個測試、1 個預發、1 個生產)共計 200+ 個應用程式,實現了上萬次自動化構建和部署,成功率 94% 以上。
 
 
 
過去需要花更多時間關注釋出過程,點擊發布後,一旦出錯需要多次 SSH 至部署機檢視原因,而現在無需關注釋出詳情(可日誌回溯),即使發現問題也可以直接使用 Zadig 除錯工具快速診斷修復,方便高效。
 
 
<基於 Zadig 的多環境管理圖示>
 
Zadig 高效便捷的多環境管理機制,非常適用於我們需要並行開發多專案,對多環境的訴求問題。

未來展望

Zadig 精準的解決了我們非常多的痛點,使研發、運維都能夠去關注更多有價值的事情。
Zadig 為當前雲原生、微服務技術背景下提供了一套簡便、高效的平臺工具,相信會在越來越多的企業中得到應用。