[CloudNative] 企業應用上云實踐手記-Cloud Native Phase 2 - 云上DevOps

      網友投稿 743 2025-04-01

      整個端到端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后,又重跑了一次

      [CloudNative] 企業應用上云實踐手記-Cloud Native Phase 2 - 云上DevOps

      最后容器啟動成功,狀態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小時內刪除侵權內容。

      上一篇:怎么把查找出來的項目在一張表上(怎么從整個表格查找)
      下一篇:魔方網表無代碼開發平臺(魔方網表移動端)
      相關文章
      亚洲国产精品无码久久九九大片 | 亚洲小视频在线播放| 亚洲线精品一区二区三区| 免费在线观看亚洲| 蜜芽亚洲av无码一区二区三区| 亚洲精品无码久久久久久| 亚洲欧美日韩综合俺去了| 亚洲综合av一区二区三区| 亚洲国产日韩精品| 久久综合久久综合亚洲| 中文字幕乱码亚洲无线三区 | 亚洲自偷自拍另类图片二区| 亚洲视频免费一区| 亚洲精品国产专区91在线| 久久久久亚洲精品日久生情| 亚洲性色成人av天堂| 亚洲AV成人无码天堂| 一区二区亚洲精品精华液| 亚洲啪AV永久无码精品放毛片| 亚洲欧美成人一区二区三区| 亚洲av无码日韩av无码网站冲| 欧美亚洲国产SUV| 亚洲国产成人久久一区WWW| 中文字幕亚洲一区二区va在线| 亚洲午夜福利717| 亚洲成a人片在线观看无码| 久久久亚洲精品国产| 亚洲视频一区网站| 亚洲人成7777| 亚洲av日韩综合一区二区三区| xvideos亚洲永久网址| 亚洲伊人久久综合中文成人网| 亚洲中文字幕无码不卡电影 | 亚洲国产系列一区二区三区| 亚洲AV香蕉一区区二区三区| 一本色道久久88亚洲综合| 久久久久亚洲精品天堂久久久久久| 亚洲精品午夜无码电影网| 亚洲天堂中文资源| tom影院亚洲国产一区二区| 亚洲av无码兔费综合|