本文分享自華為雲社群《Jenkins對接CCE autopilot叢集實戰》,作者: 可以交個朋友。
一 背景
鑑於日趨流行的serverless
技術架構、以及使用者經常談及的降本的需求。考慮Jenkins主從架構的特性,slave節點可以在工作的時候部署在任意平臺上執行master節點下發的任務,因此可以基於CCE Autopilot叢集為Jenkins的agent節點設定執行平臺。
二 簡介
- 以java專案為例,完成java 業務從程式碼拉取、maven編譯、構建映象、推送映象、修改yaml檔案推送到程式碼倉庫等一系列CI流程。
- jenkins agent容器使用谷歌提供的
Kaniko
映象
三 操作實踐
提前安裝好jenkis,並配置kubernetes外掛。
3.1 配置jenkins連線autopilot叢集
建立autopilot叢集的連線憑據
型別
: 選擇secret file
file
: 上傳autopilot叢集的kubeconfig配置檔案
Clouds中配置連線autopilot叢集
在系統管理中選擇clouds,點選新增
Cloud name
: 自定義即可
Type
: 選擇Kubernetes
Kubernetes地址
: 填寫autopilot叢集的apiserver連線地址
Kubernetes名稱空間
: 動態agent執行的名稱空間,可自定義
憑據
: 選擇步驟1建立的憑據,選擇完憑據之後點選測試連線,連線正常就能檢視叢集版本
jenkins地址
: jenkins的訪問地址
jenkins通道
: jenkins訪問的50000埠,需要建立svc開發該埠
配置完成,最後儲存即可。
3.2 配置pod模板
在Clouds中選擇Pod Templates然後點選建立
名稱
: 可自定義
名稱空間
: 選擇和Clouds配置一樣即可,如:default
用法
: 預設即可。例如: 只允許執行繫結到這臺機器的job
配置基礎映象模版
名稱
: 填寫jnlp,固定寫法
Docker映象
: inbound映象,執行 docker pull jenkins/inbound-agent,然後上傳到swr
工作目錄
: 自定義
配置Maven打包映象
名稱
: 填寫maven,可自定義,寫pipeline時會用到
Docker映象
: maven映象,docker pull maven:3.8.1-jdk-8,然後又推送到swr映象倉庫
工作目錄
: 自定義
執行命令
: sleep
執行引數
: 9999999
配置build映象任務
名稱
: 填寫build,可自定義,寫pipeline會用到
Docker映象
: kaniko映象,docker pull aiotceo/kaniko-executor,提前推送到SWR
工作目錄
: 可以自定義
執行命令
: /busybox/cat
3.3 其他配置
對Maven的打包目錄進行快取
前提
:需要前提建立一個PVC儲存
申明值
:填寫建立的PVC儲存名稱
掛載路徑
:固定填寫/root/.m2
配置拉取映象的secret
名稱
:固定填寫default-secret
配置連線swr的secret
登入ECS伺服器,配置連線autopilot叢集,執行如下程式碼:
yum install git -y kubectl create secret docker-registry swr-secret \ --docker-server=https://swr.cn-******.com \ --docker-username=***** --docker-password=****** \ --dry-run=client -o json |jq -r \ '.data.".dockerconfigjson"' |base64 -d > /tmp/config.json kubectl create secret generic swr-secret --from-file=config.json
docker-server
:填寫swr的介面地址
docker-username
:填寫 region@ak,透過AK,SK獲取長期登入指令。 例如: cn-north-7@HL9SLYV9UDY428M6TAJ5
docker-password
:填寫SK,透過AK,SK獲取長期登入指令。
配置Secret Volume
Secret名稱
: 填寫上面生成的secret名字
掛載路徑
: kaniko/.docker,固定寫法
3.4 編寫pipeline
def repository_url = "swr.******.com" def git_repo = "https://******.git" def app_git_branch = "master" podTemplate( inheritFrom: 'agent', cloud: 'test' ) { node(POD_LABEL) { stage('拉取程式碼'){‘ echo "pull clone"' git branch: "${app_git_branch}", url: "${git_repo}" } container('maven'){ stage('編譯打包'){ echo "build package" sh "mvn clean package -DskipTests" } } container('build'){ stage('映象構建'){ echo "build images and push images" sh "/kaniko/executor -f Dockerfile -c . -d ${repository_url}/tomcat:${BUILD_ID} --force" } } } }
四 結果展示
jenkins agent 執行在autopilot 叢集中
推送映象到SWR映象倉庫中
jenkins CI階段檢視如下
點選關注,第一時間瞭解華為雲新鮮技術~