摘要
部門項目由于需要管理多個服務厅瞎,同時服務依賴的基礎環(huán)境較為復雜慌闭,導致項目工程管理起來比較負責。所以采用devops的方式進行工程項目管理查排,包括代碼構建凳枝、自動化測試、鏡像打包跋核、部署等功能岖瑰,實現(xiàn)自動化運維管理叛买。
持續(xù)部署實踐
主要涉及以下幾個部分:
項目管理:分為代碼管理(包含分支管理),鏡像管理(含版本管理)蹋订,配置管理(包含部署服務器聪全、參數(shù)等管理)
DevOps:主要通過工具實現(xiàn)從集成、測試辅辩、構建到部署的流程难礼,其工作流程如下:
1、持續(xù)集成玫锋,基于Bitbucket實現(xiàn)代碼管理蛾茉,包括代碼分支開發(fā)管理、代碼審計管理撩鹿、代碼構建等功能;
2谦炬、持續(xù)測試,基于jenkins节沦、junit實現(xiàn)自動化測試;
3键思、持續(xù)構建,基于docker甫贯、harbor實現(xiàn)docker鏡像的封裝和docker鏡像的管理;
4吼鳞、持續(xù)部署,基于配置管理實現(xiàn)參數(shù)統(tǒng)一配置叫搁,并采用kubenetes實現(xiàn)自動化部署功能赔桌。
實現(xiàn)流程
通過Jenkins實現(xiàn)各環(huán)節(jié)的調(diào)度
【持續(xù)集成】
代碼使用Bitbucket工具做管理,Bitbucket提供基于Pull Request的代碼評審功能渴逻,在此將項目開發(fā)源碼與配置文件都放在Bitbucket上做管理疾党,每次構建時Jenkins會從配置文件庫中拉取最新的配置文件,從代碼庫中拉取指定分支的代碼惨奕,再執(zhí)行后續(xù)的任務雪位。
因為采用的開發(fā)語言為Golang,我們使用了Go自身的vendor功能做包依賴管理梨撞。所以這里不涉及如nexus等第三方包管理工具雹洗。
【持續(xù)測試】
項目采用beego框架,單元測試采用go test框架測試聋袋,集成測試調(diào)用獨立的測試工程队伟;
【持續(xù)構建】
在執(zhí)行構建時,首先由Jenkins拉取最新的配置文件(包括需要部署到哪一個環(huán)境幽勒,項目中存在兩套Kubernetes環(huán)境)嗜侮,根據(jù)選擇的所要部署的不同的環(huán)境,生成不同的配置文件。采用Harbor開源工具做鏡像管理锈颗,每次執(zhí)行Dockfile生成的鏡像會被推送到本地的鏡像庫顷霹。
【持續(xù)部署】
將容器配置通過ssh插件推送到遠端的部署服務器(部署到哪一臺服務器由上游job傳參確定),在遠程服務器中從鏡像庫中拉取鏡像击吱,執(zhí)行yaml文件淋淀,啟動pod。
邏輯架構
邏輯架構方面覆醇,分為代碼管理朵纷、鏡像管理七兜、
代碼管理--分支開發(fā)(采用分支開發(fā)箕憾,主干發(fā)布模式),配置文件倉庫
鏡像管理--主要負責鏡像構建造寝、上傳常摧、下載以及鏡像的版本管理
部署管理--管理配置文件搅吁,如Dockerfile、yaml落午、bash等腳本文件谎懦。
部署路由--依據(jù)上游選擇的環(huán)境不同,選擇部署到不同的環(huán)境中溃斋,目前采用的是固定IP方式界拦,下一階段采用路由方式選擇不同的部署環(huán)境。目前項目組中實現(xiàn)的是測試環(huán)境和開發(fā)環(huán)境的持續(xù)部署盐类,由于生產(chǎn)環(huán)境相對獨立寞奸,所以在客戶提供的服務器或環(huán)境中采用半自動的方式部署,即鏡像結(jié)合yaml文件部署在跳。
技術架構
本次實踐從技術架構層面,主要分為以下幾個層面:
鏡像管理:主要分為基礎鏡像管理(操作系統(tǒng)隐岛、基礎環(huán)境依賴的軟件)猫妙,以及應用鏡像:
部署平臺鏡像、管理平臺鏡像聚凹、瀏覽器平臺鏡像割坠、Portal鏡像,這四個鏡像四個獨立的應用模塊妒牙。
實現(xiàn)架構
具體的代碼實現(xiàn)彼哼,可以參考下下面的結(jié)構,項目中的所有涉及環(huán)境及配置相關的文體均在此統(tǒng)一管理維護湘今。
部署方式如下圖敢朱,整體通過Jenkins調(diào)度,兩套K8s的master節(jié)點,一臺Harbor服務器拴签,部署通過Jenkins中的ssh插件方式推送孝常,每次執(zhí)行前通過選擇所需要部署到的服務器點擊構建執(zhí)行,上游的job會將所要部署的服務器的IP傳參到下游的job中蚓哩,實現(xiàn)一鍵部署构灸。
總結(jié)
目前項目中存在一套開發(fā)環(huán)境和一套測試環(huán)境,均可通過一鍵部署方式將最新的代碼以pod方式部署到各自的環(huán)境中岸梨,也可手動執(zhí)行喜颁,選擇更新哪一個模塊的代碼,解決了人工部署可能出現(xiàn)的操作問題以及縮短了部署時間曹阔,目前從代碼更新到應用運行使用僅需2分鐘左右洛巢。
這套流程還在改進中,也希望感興趣的同學一起學習交流次兆。