jenkins Redeploy Rancher2.x Workload插件實現CI/CD


一、概述

在上一篇文章,鏈接如下:

https://www.cnblogs.com/xiao987334176/p/13074198.html

已經實現了基於Jenkins+Gitlab+Harbor+Rancher+k8s CI/CD,但是有一個問題,需要jenkins ssh登錄到k8s master節點執行kubectl修改鏡像地址。

但是由於安全問題,不允許jenkins  ssh登錄到k8s master節點。這個時候,可以通過Redeploy Rancher2.x Workload插件來完成修改鏡像地址。

這樣就避免了ssh登錄問題。

 

二、Rancher創建api key

這個是給Jenkins來使用的。

點擊用戶右上角-->API & Keys

 

添加key

 

輸入描述,選擇永不過期,這里不指定作用范圍。

請根據實際情況來原則

 

創建成功后,一定要保存。它只會顯示一次 

 

對於Redeploy Rancher2.x Workload Plugin而言,它只需要用到2個參數。

API訪問地址:
https://10.212.82.86/v3

Bearer Token:
token-96p7n:d8sw4vlff68kqspcwnflbwpptt565c5cszltwbhgb4wcz9w6k5fxmj

下面會重點介紹

 

三、jenkins配置

插件安裝

Redeploy Rancher2.x Workload

這個插件是專門針對Rancher2.x版本的,1.x版本的插件為Rancher

 

Environment Injector

這個插件是用來修改jenkins 環境變量用的。

 

 

添加憑據

點擊憑據

 

點擊進去

 

再點擊

 

 添加憑據

 

 

類型選擇rancher2.x API Keys

 

說明:

ID:  這個是唯一的,隨便填寫。

描述: 隨便填寫

Endpoint:Rancher api地址,上面Rancher api keys里面的信息

Trust certification:信任證書,這里一定要勾選。

Bearer Token:不記名token,,上面Rancher api keys里面的信息

 

填寫完成后,點擊Test Connection按鈕,出現Connect Succeed!,表示連接成功。

最后點擊保存。

 

新建job

名稱為:test_admin_rancher,選擇自由風格。

 

通用配置

 

參數化構建

 

源碼管理

執行shell腳本

 

完整代碼如下:

export HARBOR_PROJECT='10.212.82.86:1180/java/admin-master'

case $Status  in
  Deploy)
    echo "Status:$Status"
    cd ${WORKSPACE}
    mvn -f pom.xml clean package
    cp dockerfile target
    cd target
    docker build -t ${HARBOR_PROJECT}:${BUILD_NUMBER} .
    docker push ${HARBOR_PROJECT}:${BUILD_NUMBER}
    docker rmi ${HARBOR_PROJECT}:${BUILD_NUMBER}
    echo "BUILD_ID=${BUILD_NUMBER}" > ${WORKSPACE}/env.txt
    echo "Completing!"
    ;;
  Rollback)
      echo "Status:$Status"
      echo "Version:${BUILD_ID}"
      echo "BUILD_ID=${BUILD_ID}" > ${WORKSPACE}/env.txt
      ;;
  *)
  exit
      ;;
esac

 這里有2個步驟,分別是發布和回滾。在最后一步時,寫入了一個env.txt,它就是用來修改jenkins環境的。

 

注入環境變量

 

寫入路徑 ${WORKSPACE}/env.txt

 

重新部署Rancher2.x工作負載

 

內容如下:

說明:

第一行顯示亂碼的,就是上面jenkins創建的憑證

Workload API Path:工作api路徑,注意:必須是以/project開頭的。先來登錄Rancher后台,查看工作負載

 

先找到我需要發布的應用admin-master-->api查看

 

 

 

跳轉的url為:

https://10.212.82.86/v3/project/c-l5nxb:p-dghs7/workloads/statefulset:default:admin-master

 

 

 

那么Workload API Path的值,就是:以/project/開頭,一直到后面部分。也就是上面我截圖顯示的。

 

Always Pull Image:這里表示總是拉取鏡像

Update Images:更新的鏡像地址。10.212.82.86:1180/java/admin-master:${BUILD_ID},注意:這里有一個變量BUILD_ID。發布和回滾時,都會用到此變量。

表示鏡像的版本!

 

最后點擊保存

 

 

 

四、測試發布和回滾

發布

先來看目錄運行的鏡像版本,顯示是32

 

 

 

登錄jenkins,發布一下。

點擊Build with Parameters

 

 

 

點擊開始構建

 

 

查看控制台輸出:

+ export HARBOR_PROJECT=10.212.82.86:1180/java/admin-master
+ HARBOR_PROJECT=10.212.82.86:1180/java/admin-master
+ case $Status in
+ echo Status:Deploy
Status:Deploy
+ cd /var/lib/jenkins/workspace/test_admin_rancher
+ mvn -f pom.xml clean package
...
+ echo BUILD_ID=1
+ echo 'Completing!'
Completing!
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path '/var/lib/jenkins/workspace/test_admin_rancher/env.txt'
[EnvInject] - Variables injected successfully.
set image tag from "10.212.82.86:1180/java/admin-master:32" to "10.212.82.86:1180/java/admin-master:1"
redeploy Rancher2.x workload succeed!
Finished: SUCCESS

可以看到鏡像更新為:10.212.82.86:1180/java/admin-master:1

 

登錄jenkins服務器,查看環境變量文件

# cat /var/lib/jenkins/workspace/test_admin_rancher/env.txt
BUILD_ID=1

注意:此文件定義的環境會覆蓋jenkins的環境變量,因此鏡像版本為1。

 

刷新Rancher頁面,發現地址已經更改過來了。

 

 

回滾

假設我需要回滾版本到32,請確保harbor倉庫中,此鏡像存在。

 

選擇回滾,輸入32

 

 

查看控制台輸出:

+ export HARBOR_PROJECT=10.212.82.86:1180/java/admin-master
+ HARBOR_PROJECT=10.212.82.86:1180/java/admin-master
+ case $Status in
+ echo Status:Rollback
Status:Rollback
+ echo Version:32
Version:32
+ echo BUILD_ID=32
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path '/var/lib/jenkins/workspace/test_admin_rancher/env.txt'
[EnvInject] - Variables injected successfully.
set image tag from "10.212.82.86:1180/java/admin-master:1" to "10.212.82.86:1180/java/admin-master:32"
redeploy Rancher2.x workload succeed!
Finished: SUCCESS

可以看到鏡像更新為:10.212.82.86:1180/java/admin-master:32

 

登錄jenkins服務器,查看環境變量文件

# cat /var/lib/jenkins/workspace/test_admin_rancher/env.txt
BUILD_ID=32

注意:此文件定義的環境會覆蓋jenkins的環境變量,因此鏡像版本為32。

 

刷新Rancher頁面,發現地址已經更改過來了。

 

 

總結

通過jenkins Redeploy Rancher2.x Workload插件,調用Rancher api,修改鏡像地址,完成了應用服務的發布和回滾。

在上篇文章中,用到了Pipeline。但是這篇文章中,用的是自由風格。

其實我也想用Pipeline,但是我不知道如何在Pipeline中調用Redeploy Rancher2.x Workload插件,所以只能用自由風格了。

 

五、Pipeline發布

感謝 QuintinX 網頁提供的幫助,pipeline的部分官方文檔: https://plugins.jenkins.io/redeploy-rancher2-workload/

模板如下:

node {
   rancherRedeploy alwaysPull: true, credential: 'rancher', images: 'busybox:lastest', workload: '/project/c-h4hxd:p-c9j8z/workloads/deployment:default:busybox'
}

說明:

alwaysPull: true表示總是pull下載鏡像。

credential: jenkins憑證id,用於調用Rancher2.x  api

images: 更新的鏡像地址

workload:API Path的值,一般以/project/開頭

 

新建job

新建一個job,選擇流水線

 

 

通用配置

 

參數化構建

 

流水線

 

 完整代碼如下:

env.CREDENTIALSID = '3085730e-f6f1-41aa-9e2b-f5586fdd6896'
env.BRANCHES = 'master'
env.GIT_URL = 'ssh://git@gitlab.aliyun.com:8022/root/admin-master.git'
env.HARBOR_PROJECT = '192.168.31.179:1180/java/admin-master'

node {
   if (env.Status == 'Deploy'){
       stage('code pull') {
           checkout([$class: 'GitSCM', branches: [[name: env.BRANCHES]],
           doGenerateSubmoduleConfigurations: false,
           userRemoteConfigs: [[credentialsId: env.CREDENTIALSID, url: env.GIT_URL]]])
       }
       stage('code Build') {
         sh '/data/apache-maven-3.6.3/bin/mvn -f pom.xml clean package'
       }
       stage('docker push') {
         sh 'cd ${WORKSPACE} && cp dockerfile target'
         sh 'cd ${WORKSPACE}/target && docker build -t ${HARBOR_PROJECT}:${BUILD_NUMBER} .'
         sh 'docker push ${HARBOR_PROJECT}:${BUILD_NUMBER}'
         sh 'docker rmi ${HARBOR_PROJECT}:${BUILD_NUMBER}'
       }
       stage('Rancher2 deploy') {
         rancherRedeploy alwaysPull: true, credential: "rancher2.x", images: "${HARBOR_PROJECT}:${BUILD_NUMBER}", workload: "/project/c-8hbz6:p-6h97b/workloads/deployment:default:admin-master"
       }
   }else{
       stage('Rancher2 rollback') {
           rancherRedeploy alwaysPull: true, credential: "rancher2.x", images: "${HARBOR_PROJECT}:${BUILD_ID}", workload: "/project/c-8hbz6:p-6h97b/workloads/deployment:default:admin-master"
       }
   }
}

 

點擊底部的保存按鈕

 

發布

 

 效果如下:

 

 

回滾

 

 效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM