
[關鍵詞]流水線;全流程自動化;持續集成;持續交付;動態伸縮
[中圖分類號]TP39 [文獻標志碼]A [文章編號]2095–6487(2024)11–0166–03
當前,信息系統建設大多采用微服務架構,隨著業務的增加,微服務數量也隨之增加,尤其是大型系統,微服務的數量多以百計,人工管理已不現實,需通過合理使用工具進行自動化管理,從而提高工作效率。信息化系統建設多以云原生技術體系、自主可控為原則設計,結合容器編排系統K8S,微服務架構與DevOps工具鏈實現全流程自動化管理。其中,文章DevOps工具鏈用到的云原生組件包括禪道、GitLab、Nexus、Maven、Jenkins等。技術組件選型基于云原生技術體系,包含較多云原生組件,在項目中可根據項目實際需要結合項目特點選擇合適的組件。
1總體架構
使用DevOps工作模式可實現信息系統建設的全生命周期系統化、自動化管理。要實現DevOps工作模式落地實施需要借助云原生組件構建DevOps 工具鏈,實現計劃階段、需求階段、設計階段、開發階段、測試階段、交付部署階段的系統化管理,做到各階段工作有跡可循。DevOps工具鏈集成與工作流程如圖1 所示。
信息系統項目的計劃、需求階段文檔以及最終成型的交付物在禪道中管理,需求及設計評審通過后將需求與設計共同打包形成開發任務,通過禪道將開發任務分配給開發人員;開發人員通過禪道領取開發任務。開發階段,使用GitLab作為代碼托管工具,使用Maven與Nexus管理微服務使用的依賴包,微服務的最終交付物是鏡像,在DevOps工具鏈中引入Jenkins作為CI/CD工具,實現代碼構建、鏡像制作持續集成、持續構建的工作。為了保障開發人員的代碼質量,在代碼構建過程中,在Jenkins中集成SonarScan 客戶端工具自動掃描代碼進行代碼質量檢查,確保交付的代碼無漏洞、無代碼缺陷,并將掃描結果同步到SonarQube服務端,便于代碼審計;代碼構建完成后引用Dockerfile 文件制作微服務鏡像,并將鏡像推送到鏡像倉庫,供測試人員部署到容器云平臺中進行系統功能及性能測試,測試完成的鏡像作為最終交付物,待上線交付用戶使用。
開發階段是持續的過程,通過圖1工具鏈的集成與協作,實現了信息系統的持續集成與繼續交付,以及信息系統全過程系統化管理。
2系統化項目管理
在項目建設過程中,項目管理至關重要,貫穿項目全生命周期,其好壞直接影響著項目的進度、成本及質量。如何高效地進行項目管理需重點關注。通過自動化項目管理工具,將項目計劃、需求及工作任務相關聯可實現項目的簡約化管理。為了實現這一目標,需要引入系統化管理工具,將項目管理納入到全流程系統化管理中,從而做到項目計劃明晰,項目需求明確,項目組內成員溝通順暢,同時也可實現項目管理過程留痕。
在項目管理過程中通過如下步驟實現項目的簡約、高效管理:①制訂項目管理里程碑,將項目劃分為需求、實施、測試及上線試運行階段,通過工具對需求進行管理。②將每個階段拆分成詳細的工作計劃,并將計劃與需求進行關聯,從而得到需求落地時間線,便于掌握項目總體進度。③將項目組成員的工作任務進行系統化管理,在分配任務時,將任務與計劃和需求關聯,便于明確項目組成員的工作狀況和對應計劃及需求的狀態。
3代碼托管與代碼質量管理
代碼托管與代碼質量管理是項目實施過程中不可或缺的兩個重要環節,尤其是大型、多團隊合作的項目,如何做好代碼管理與代碼質量管理尤其重要。
在實際項目實施過程中,單個服務的代碼可分為開發分支(dev)、測試分支(test)、預生產分支(premaster)及生產分支(master)。項目開發時初始代碼均由master 分支拉取,開發人員在dev 分支按模塊或開發人員賬號創建單獨的分支,本地開發自測完成后將本地代碼檢入dev 分支并在開發環境發版進行線上測試;dev 分支完成后將代價檢入test 分支提交測試人員在測試環境發布測試,如此依次進行預生產、生產環境的代碼檢入和各自對應預生產環境和生產環境的發布。master 分支是最終的成品庫,在該分支進行代碼的版本管理和產品功能發布。當測試、預生產及生產環境出現bug時,需在對應分支創建hotfix 分支進行bug修改,功能測試通過后將hotfix 分支的代碼檢入master、premaster、test 及dev 分支。
代碼質量管理指通過一系列過程和工具確保軟件產品滿足用戶需求,符合預期質量標準。在持續集成階段,通過代碼質量檢查實現對代碼的靜態掃描,得到代碼中的漏洞、缺陷,形成質量報告,指導開發人員規范編碼。集成測試與系統測試屬于動態測試,動態測試可幫助及時發現系統運行時的缺陷。靜態與動態兩種檢查模式,保障開發的系統滿足安全性、健康性和可靠性的要求。
4"Jenkins流水線
通過流水線方式實現自動化構建最常用的工具是Jenkins。通過Jenkins 工具可將DevOps 工具鏈中各組件集成到一起,Jenkins通過集成DevOps 工具鏈中的GitLab、Naven、Nexus、SonarScan 并結合K8S 實現流水線式一鍵和自動化部署上線,集成以上組件需要在Jenkins 中安裝相關組件的插件。
Jenkins 作為常用的CI/CD工具,常用的方式有自由風格和流水線(Pipeline)。其中,Pipeline是一套運行時工作流框架,將原本獨立運行的單個或多個節點任務連接起來,實現單個任務難以完成的復雜流程編排和流程可視化。實現流水線模式需要進行流水線腳本編寫,可采用腳本式和聲明式兩種模式,流水線腳本可在Jenkins 系統通過頁面方式編寫shell 腳本,也可以在工程中創建Jenkinsfile 文件,使用者選用哪種方式可根據自身掌握程度進行選擇。
在編寫流水線腳本時主要包含以下步驟。
(1)拉取GiaLab代碼并調用Maven工具進行代碼構建。
(2)調用SonarScan掃描代碼進行代碼質量檢查。
(3)調用Dockerfile 文件基于基礎鏡像制作業務鏡像。
(4)將業務鏡像推送到鏡像倉庫。
(5)將鏡像部署到K8S平臺中。
以上方式需要手動觸發構建,在開發過程中,為了提高開發效率,需要開發人員在提交代碼時自動構建、交付和部署。實現這種方式需要在GitLab 中配置觸發Jenkins自動構建的webhook,配置流程如下。
(1)在GitLab 中創建訪問Token。
(2)在Jenkins 系統設置中配置GitLab訪問地址以及輸入步驟1生成的Token。
(3)配置Jenkins 中Pipeline 工程,在構建觸發器中設置webhook 觸發。
(4)在GitLab 中集成模塊配置webhook 鉤子及觸發方式。
通過流水線可視化模式,便于在構建過程中快速定位問題,從而節省排查問題的工作量,通過自動化構建模式減少了項目組內部溝通成本,節省了開發過程中重復機械乏味的工作,提高了開發速度和效率。
5容器云平臺的能力
當前容器技術已較為成熟,且應用廣泛,尤其是對于微服務架構來說,容器部署已成為必選,而使用Docker 與K8S 結合搭建容器云平臺幾乎成為微服務架構的標配。DevOps與容器化是云原生生態的兩大技術體系,兩者可結合使用。
容器云平臺提供了應用程序的部署、擴展和管理,包涵容器編排、資源調度、彈性伸縮、部署管理、服務發現等一系列功能,基于云化部署的信息化全流程管理,使得應用部署更簡單高效。K8S 中的自我修復特性保障了應用的可用性,動態擴縮容能力保障了應用的健壯性。
5.1部署Jenkins
將Jenkins部署在容器云平臺之前需要制作Jenkins與Maven的鏡像,將兩者打包到一個鏡像中,在配置K8S的Deployment 配置文件時需要完成以下配置項。
(1)掛載jenkins_home 目錄到宿主機(如有共享存儲可掛載到共享存儲數據卷)。
(2)掛載宿主機的docker 進程到jenkins 的/run/docker.sock。
(3)掛載maven 的settings.xml 到maven 工作目錄/conf/settings.xml。
(4)掛載/etc/docker/daemon.json保證能夠訪問harbor倉庫。
(5)配置節點選擇器,將pod調度到指定的工作節點上,保證pod銷毀重建時jenkins的數據不丟失。
5.2自動擴縮
在基于云化部署的信息化系統中,除了保證基本的容器云平臺能力之外,還需要保障應用的高可用性,做到訪問高峰期自動擴容,低谷期自動縮容,實現動態自動擴縮容。
K8S 中根據適用擴縮對象實現自動擴縮容,分工作節點和工作負載。基于工作節點的擴縮適用于K8S工作節點在資源不滿足調度時,通過增加工作節點的方式增加系統資源,在工作節點資源閑置時,通過減少工作節點釋放系統資源,從而保證硬件資源的高效利用?;诠ぷ髫撦d的擴縮,主要實現自動更新工作負載資源以滿足需求,最終體現在對Pod 的資源調度,擴縮Pod 資源可采用垂直擴縮和水平擴縮,垂直擴縮即資源緊張時將更多資源(例如,內存或 CPU)分配給已經為工作負載運行的 Pod,資源閑置時縮減Pod 的資源,水平擴縮通多增加和減少Pod 的數量滿足需求,在實際生產環境中,大多采用水平Pod 數量擴縮。
水平Pod數量擴縮實現時有HPA、KPA 和VPA3 種方式。HPA(Horizontal Pod Autoscaling)主要通過監測工作節點的內存或CPU 等資源實現,在部署應用時增加HorizontalPodAutoscaler 控制器并配置相應的度量指標實現。KPA(Knative Pod Autoscaler)基于請求數對Pod自動擴縮容。VPA(Vertical PodAutoscaler)基于Pod 的資源使用情況自動為集群設置資源占用的限制,其會根據容器資源使用率自動設置Pod的CPU和內存的requests,從而允許在節點上進行適當調度,以便為每個Pod 提供適當的可用節點。
基于容器云平臺的云化部署能力,可實現應用的一鍵部署,不必關注服務器硬件及中間件等繁瑣的集成配置等工作,為基于云化部署的信息化系統全流程管理提供了一站式解決方案。
6結束語
文章對基于云化部署的信息系統自動化管理平臺設計進行了探討,基于云平臺設計,項目全生命周期得到了有效管理,從項目計劃、需求、設計、開發、測試、部署全過程實現了自動化管理,做到需求快速響應,項目管理過程有跡可循。實現了從敏捷開發、敏捷交付到敏捷運維,降低了人員流動引起的風險。