[CloudNative] 企業應用上云實踐手記-Cloud Native Phase 2 - 云上DevOps
整個端到端CloudNative產品落地,計劃分為六個階段展開:

Cloud Native Phase 1 - 云上微服務開發端到端
Cloud Native Phase 2 - 云上DevOps
Cloud Native Phase 3 - 云原生應用AutoConfig
Cloud Native Phase 4 – 如何實現云上彈性伸縮和熔斷限流
Cloud Native Phase 5 - 云上權限管理和網絡安全
Cloud Native Phase 6 – 如何申請外網域名和SSL證書
本文為第二章即Cloud Native Phase 2 - 云上DevOps。
1. 代碼管理與私有倉庫
代碼管理和私有倉庫部分,由CodeHub負責即可。
倉庫如何創建、如何拉取和提交代碼,在Phase1代碼倉庫創建和代碼提交章節已經描述過了,此處就不重復寫了。
2. 編譯打包和推送
執行Maven命令mvn clean package進行本地打包
PS:這里采用的是spring-boot-maven-plugin,搭配repackage?goal,以獲得一個fat jar,也可以打小包,在Dockerfile里引入外部jar
Dockerfile用來指定docker image的基礎鏡像,并操作將前面打包生成的jar置入,并設置docker image入口。
代碼參考如下,這里是為了配合fat jar簡單寫的docker image:
1
#引入JRE鏡像
2
FROM openjdk:8-jre-alpine
3
#找到應用jar包所在位置 <--其他應用請修改這里
4
ARG JAR_FILE=vod-mgr-service/target/*.jar
5
#復制jar包至app.jar,設置執行入口
6
COPY ${JAR_FILE} app.jar
7
ENTRYPOINT ["java","-jar","/app.jar"]
8
PS:如果為了啟動效率,可以將一部分依賴外置,以獲得更小的docker image
3. 云上編譯并構建容器鏡像
本地驗證沒問題以后,就到CloudPipeline上進行配置,首先通過構建&發布->編譯構建導航到構建任務創建頁面:
然后點擊右上角的新建任務。
配置任務的基本信息中,特別提示了是選X86還是鯤鵬機器,當然,也可以自己申請ECS作為自己的構建資源池,這樣就不用和其他人擠在一起。
選擇前面創建的代碼倉即可,這里還支持一些特殊的代碼版本選擇,根據TAG或者CommitID。
這里是重頭戲,首先添加組件
這里使用了兩個組件,這兩個組件是在同一個執行機上順序執行的,因此可以先打包,然后直接根據打包內容做鏡像推送:
Maven構建
組件拿到以后,就自帶了一段代碼,簡單改了一下,修改為
mvn clean package -Dmaven.test.failure.ignore=true -U,
意思是強制更新snapshot(因為我這里本地依賴使用的snapshot版本),并且單元測試失敗的時候繼續執行,因為后面開啟了單元測試報告。
額外的一些配置,如果涉及到mvn push,則推送到私有倉庫,同時開啟了單元測試報告,也開啟了緩存,這樣同樣的包就不用拉兩次。
PS:關于maven命令的細節,可以參考官方文檔
制作鏡像并推送到SWR倉庫
制作鏡像的過程就是docker build的過程,然后docker push到SWR倉庫,這里自動做了docker login的動作,所以省了不少事兒
然后這里修改Dockerfile目錄為.build/Dockerfile,完成
PS:關于docker命令的細節,可以參考官方文檔
這里有一個參數,叫${dockerImageVersion},這是在參數設置頁面配置的,數據是從外部傳入的。
點擊最下面的保存并執行,會看到前面設置的參數彈出了,這里輸入一下版本號v2021.03.04,任務開始
構建完成,開始制作鏡像并推送到SWR倉庫
推送完成
從華為云控制臺,進入SWR服務,即可看到我的自有鏡像。
可以看到剛才的版本v2021.03.04已經在里面了
包還是不小的,SWR提供了老化能力,可以設置保留幾天或者幾個版本
4. 云上部署應用到ServiceStage
編譯構建容器鏡像,并推送到SWR后,通過構建&發布->部署導航到部署任務創建頁面:
同樣在右上角創建任務
這里選擇ServiceStage應用部署,這里組件名稱一定要和Phase1中創建的一樣,組件版本${modulReleaseVersion}是個參數,后面解釋
其他的配置,就是在選擇容器鏡像和CSE等,參考下圖即可
看起來確實不錯,很簡單,但是選完以后會發現,好像沒有設置應用和環境啊,果然,部署以后負面效果就顯現出來了。
這里我也配置了兩個參數,可以參考下圖
然后點擊保存并執行,填寫前面的DockerImage版本v2021.03.04
然后任務就跑起來了
回到ServiceStage,一個新的default應用被創建了
組件也被新建了一個
PS:由于我的代碼加了多套profile,而自動部署的時候,不會自動引入前面配置的參數,所以補充-Dspring.profiles.active=pro后,又重跑了一次
最后容器啟動成功,狀態OK
5. 配置CI/CD流水線
入口在這里,構建&發布->流水線,點擊創建即可。
這一步不需要太多說明。
選擇代碼倉和分支即可
這里不使用模板,從零開始,配置一條流水線。
第一階段選擇代碼源。
第二階段是編譯構建,選擇前面配置的VodMgrService-build-and-push-v1,這時候就會帶出來,有參數需要填,這里填了${releaseVersion}
這個參數來自左側的參數配置,是自增長的。
第三階段是發布倉庫,這里不做過多說明
第四階段是部署,這里選擇前面配置的VodMgrService-deploy-v1,同樣有參數需要配置。
在推送時,自動觸發流水線,是在流水線創建時配置的,如果不想配置就取消觸發分支設置。
當有代碼push上來的時候,流水線就自動觸發了
6. 代碼質量掃描和門禁
首先,在構建環節,增加一個步驟,進行代碼檢查
代碼檢查任務提供了一些規則集,這里選擇華為推薦規則集進行質檢
通過代碼檢查,可以暴露出來一些JavaDoc問題
創建門禁任務,可以更好的保障代碼質量(PS:一般放在MR提交的自動構建流水線上)
點擊創建,新建一個特別嚴格的門禁,不允許有質量問題
結果很快跑出來,這里報錯了,流水線不往下運行了
7. MergeRequst和Committer
回到CodeHub,在代碼->代碼托管->分支頁面,點擊新建分支
本地拉取一下,checkout到新的分支
做一點修改,提交并推送
切換到合并請求頁面,點擊新建合并請求
把審核人、合并人,都設置成我自己(PS:真實場景上,必須不同人,可以在倉庫里配置,后面再介紹)
在給出意見、評分后,可以進行合入。
具體入口為:代碼->代碼檢查->代碼檢查詳情
8. 自動化測試
入口在測試->測試設計->接口測試
新建一個測試用例
點擊進入測試用例,選擇測試腳本,進行API設計
API測試套件可以理解成API測試用例的集合,入口在測試執行->測試套件這里
測試套件可以選擇并行或者串行
回到流水線,點擊編輯,在部署階段,增加一個任務
選擇接口測試類型,即可選到前面創建的API測試套件
保存即可運行起來。
至此,一條完整的CICD流水線就完成了,里面包含了持續集成、代碼質量檢查、自動化測試、Code Review等動作。
DevOps Docker
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。