Jenkins pipeline集成回滚功能

脚本准备

回滚到上一个版本

k8s-rollback.sh 基于k8s机制的回滚策略,回滚到上一个版本使用

#!/bin/sh

#回滚到上一个版本,使用k8s的版本回滚机制

remoteIp=177.168.22.26
ssh [email protected]
echo "k8s远程机器地址: ${remoteIp}"

ssh [email protected] "kubectl rollout undo deployment ${project_name} "
#通过--to-revision 参数指定回滚版本,因为开发者不关注k8s机制,所以回滚到较早某个版本时不使用k8s机制
# kubectl rollout undo deployment temp-docker --to-revision=134 

exit
回滚到指定版本

使用指定jenkins ${BUILD_ID}方式回滚
k8s-deployment.sh 生成回滚发布的yaml文件,需要两个参数 环境变量和历史Id

#!/bin/sh

#生成部署k8s的 yaml 模板文件
echo "生成部署k8s的 yaml 模板文件"


#创建文件夹
dir="/data/k8s-model/$APP_NAME"
if [ -d "$dir" ]
then
 echo "dir exist"
  
else
 echo "dir not exist,will create"
 mkdir -p $dir
fi

cat > /data/k8s-model/$APP_NAME/app_rollback_${2}.yaml <

jenkins-rollback.sh 发布脚本,需要参数,历史构建ID

#!/bin/sh

#拷贝启动镜像的文件到  k8smaster服务器并在远程执行

remoteIp=172.16.22.26

echo "k8s远程机器地址: ${remoteIp}"

function remotessh(){
ssh -Tq root@${remoteIp}  << remotessh
dir="/data/k8s-model/$APP_NAME"
  if [ -d "$dir" ]
   then
     echo "dir exist"
  
   else
     echo "dir not exist,will create"
     mkdir -p "$dir"
   fi
   
   rm -rf /data/k8s-model/$APP_NAME/*
   
   exit
remotessh
}

dir="/data/k8s-model/$APP_NAME"
ssh root@$remoteIp " mkdir -p $dir"

 #上传文件到远程
#去掉发布的版本号
 scp -r /data/k8s-model/$APP_NAME/app_rollback_${1}.yaml  root@${remoteIp}:/data/k8s-model/$APP_NAME/app_rollback_${1}.yaml
 ssh -Tq root@${remoteIp}  << remotessh
   cd /data/k8s-model/$APP_NAME
   kubectl apply  -f app_rollback_${1}.yaml  
    
   
   exit
 remotessh
 
 
 
echo "拷贝 镜像的文件到  k8smaster服务器并在远程执行  完毕"
echo "==================================================================="
echo "  "
jenkins pipeline脚本
stage('回滚到指定版本') {
      input {
         message "确认回滚?"
         ok "是"
         submitter ""
         parameters {
         string(name: '版本号', defaultValue: '0', description: '构建生产历史版本号,0表示回滚到上一个版本')
         }
       }
       steps {
             script {
                  if("${版本号}" == '0'){

                     echo "回滚到上一个版本,版本号为${版本号}"
                                sh '/data/template/k8s-rollback.sh'

                   }else{
                        echo "回滚到指定版本,版本号为${版本号}"
                         sh '/data/template/k8s-deployment.sh pro ${版本号}'
                         sh '/data/template/jenkins-rollback.sh ${版本号}'

                    }
            }
     }                        
}

流程截图

Jenkins pipeline集成回滚功能_第1张图片

你可能感兴趣的:(jenkins)