本文主要基于小微團隊與一定規模團隊的應用部署場景說明。
背景信息
傳統的 DevOps 平臺提供從需求管理、代碼倉庫、流水線、制品倉庫等一站式工具鏈,為了保障軟件按時、按質地交付,很多團隊想到了利用工具自動化規范起來,從工具上投入人力拓展,期望研發人員使用工具就能夠按規范高效交付。流程如下:
企業會將代碼、制品等研發資產都托管到代碼庫、制品庫等工具上,并通過分支保護策略、制品晉級機制等手段,將原本定義在文檔中的代碼規范、制品規范交由代碼庫、制品庫工具來承載。
另一方面,企業會利用流水線工具,按照研發的各個階段,定義成多條流水線,例如:開發流水線、測試流水線、生產流水線,在每條流水線定義好要執行的步驟,比如:單元測試、代碼掃描、自動化掃描等。
最后,企業會將這些代碼庫、制品庫和流水線都定義成模板,后續團隊都基于這些模板來創建代碼庫、制品庫和流水線,這樣自然而然研發規范就建立起來了。
這種方式對于廣大小微團隊已經能夠較好地滿足訴求了,但是很多中大型的研發團隊會發現,基于這套產品進行研發協同,過于靈活了些,還是會面臨許些問題。這時候,我們意識到對于中大型的研發團隊,靠這種松耦合的基礎工具組合是很難支撐研發規范的落地的。因此,我們在 Flow 流水線工具基礎上推出了 AppStack 應用交付平臺。基于 Flow,AppStack 提供以下額外能力:
以應用作為研發工作的主入口
應用,是一個可獨立交付的對外提供服務的單元,在研發態,通常對應一個到多個功能模塊,關聯一個代碼庫;在運行態,通常對應一個微服務。云效 AppStack 以應用視角建立這個應用相關的代碼、配置、團隊、環境、應用從開發到部署上線的流程、以及額外的管控策略等。每個應用都有確定的歸屬團隊,由這個團隊負責其開發、測試、部署、運維等一系列流程。
流水線掛在應用下,按環境編排
常見的組織形式有兩種:
一種是以 Jenkins 和云效 Flow 為代表,每條流水線都是獨立的,通過建立分組和標簽人為地進行分類;
另一種是以 Gitlab 和 Travis 為代表,流水線是屬于代碼庫的,每個代碼庫可定義自己的流水線。
當團隊達到一定的規模之后都有許些問題。1.流水線太多造成管理難的現狀;2.當代碼庫為大的倉庫,包含多個應用代碼,或者從代碼提交到部署要經過多個頻率不同的階段時,流水線與代碼庫之間很難一一對應,常常需要做很多妥協。
AppStack提供了另一種流水線組織方式:按應用組織流水線為維度。這種方式并不只是簡單將多條流水線按應用分組到一起,而是將流水線直接作為應用的一部分。應用中的流水線,其代碼庫唯一的,這就避免了流水線影響其它應用。同時,AppStack 統一了應用的部署,且在流水線的創建上可以通過模板做全局管控,將發布準入等卡點內嵌到了流水線中,由團隊管理員統一管控,從而保證了發布的安全可控。
提供多環境管理、部署觀測、版本管理能力
服務上線需要涉及到多套環境與功能的驗證(開發、測試、預發、生產等)。在云化基礎設施中,環境內部的資源會頻繁變化(例如,彈性擴縮容時刻都有可能添加或者減少您的云主機)。這時候需要對部署流程隔離部署環境差異以及環境內頻繁變化的基礎設施。當需要執行一個部署時,操作人員只需要指定部署到哪個環境(即環境唯一名稱),而不需要關心環境內部的任何信息,只需把部署請求分發到指定環境的K8s集群或主機上并自動執行。
AppStack 以應用視角統一管理多套環境,環境關聯 K8s 集群、主機或其他云資源,通過流水線統一的「AppStack 部署」組件來屏蔽環境差異,自動化應用CI/CD流程。
此外,AppStack 環境部署能力還提供滾動升級、分批發布多種策略,支持實時查看環境部署狀態、容器日志等,無需跳轉基礎設施平臺查看資源狀態(也解決了一線研發同學無基礎設施資源管理權限的問題)。提供統一的環境部署版本記錄,幫助快速回滾。
基于應用模板批量管理
隨著微服務和云原生技術的發展,一個業務系統往往由多個微服務應用組成,多個業務方向涉及幾十上百應用,涉及成百上千條流水線。而一個企業下通常只有 1~2 個運維或架構師負責這些應用的配置管理工作,無疑就帶來了大量的管理和維護成本。
云效 AppStack 提供應用模板,企業可以按照技術棧、部署架構等自定義應用模板,如定義通用 Java 后臺應用模板,預設好應用Maven 程序包構建配置、鏡像構建配置、部署 YAML 配置、以及標準的發布上線流程等,新應用上線時只需要選擇合適的模板一鍵創建并初始化應用配置。
此外,當應用模板有修改時可以批量升級到應用。典型場景:
應用穩定性升級項目要求所有統一接入監控日志,需要在應用部署中增加 SkyWalking Sidecar 容器,用于日志采集、上報等。可以修改應用模板中的部署 YAML 后,批量同步到關聯應用。
企業內引入安全掃描能力,安全同學要求將安全掃描結果作為發布流程卡點,沒有通過安全掃描的應用不允許發布。可以修改應用模板中的研發流程后,批量同步到關聯應用。