jenkins Redeploy Rancher2.x Workload插件实现CI/CD

2021/04 作者:ihunter 0 0

可以通过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:32Version: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"
       }
   }
}
复制代码

 

点击底部的保存按钮

 

发布

 

 效果如下:

 

 

回滚

 

 效果如下:

 

赞(1) 更多分享

上篇: K8s微服务自动化部署容器(Rancher流水线)
下篇: jenkins 调用Rancher2.x api实现CI/CD