Jenkins 版本迭代以及回滚

Posted BasicLab基础架构实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins 版本迭代以及回滚相关的知识,希望对你有一定的参考价值。

一、发布

        修改 ph任务,勾选 此项目参数化构建,点击添加参数,选择Choice Parameter

        输入参数,这里有2个固定选项,分别是发布和回滚,再点击底部的添加参数,选择String Parameter

输入参数,这个版本号,就是来回滚的。

        再进入到Bulid,修改执行命令

case $Status  in
  Deploy)
    echo "Status:$Status"
    bash -x /root/docker_dir/deploy_docker.sh
    echo "Completing!"
    ;;
  Rollback)
      echo "Status:$Status"
      echo "Version:$Version"
      bash -x /root/docker_dir/rollback_docker.sh
      echo "Completing!"
      ;;
  *)
  exit
      ;;
esac

        效果如下:

        修改3个shell脚本

        deploy_docker.sh

#!/bin/bash

set -e
harbor_project="java"
projectName=$JOB_NAME
docker_path=$WORKSPACE
appName=$JOB_NAME.jar

# harbor认证用户
user_name=jenkins
password=Jenkins@1234

# harbor地址以及tag
tag=$(date +%s)
harbor_server=192.168.10.122
server_path=$harbor_server
taget_image=$projectName:$tag
#$BUILD_NUMBER
echo $taget_image

# 登录docker
cd $docker_path
sudo docker login $harbor_server -u $user_name -p $password

# 生成镜像并推送到harbor,最后删除本地镜像
cp $WORKSPACE/target/*.jar $appName
sudo docker build --build-arg app=$appName -t $taget_image .
sudo docker tag $taget_image $server_path/$harbor_project/$taget_image
echo "The name of image is $server_path/$harbor_project/$taget_image"
sudo docker push $server_path/$harbor_project/$taget_image
sudo docker rmi -f $(docker images|grep $projectName|grep $tag|awk 'print $3'|head -n 1)

# 替换yaml中镜像的版本号
MASTER="192.168.10.130"
CONF_DIR="/root/kube-conf"

ssh $MASTER sed -i "s/$projectName:[^.]*/$taget_image/g" $CONF_DIR/$projectName-rc.yaml

        sed命令解释:

        $projectName:[^.]*   表示匹配 项目名:任意长度内容。

        rollback_docker.sh

#!/bin/bash

# 替换yaml中镜像的版本号
MASTER="192.168.10.130"
CONF_DIR="/root/kube-conf"
projectName=$JOB_NAME
taget_image=$JOB_NAME:$Version

ssh $MASTER sed -i "s/$projectName:[^.]*/$taget_image/g" $CONF_DIR/$projectName-rc.yaml

        reboot_app.sh

#!/bin/bash
MASTER="192.168.10.130"
CONF_DIR="/root/kube-conf"
ProJ=$JOB_NAME

#scp $WORKSPACE/*.yaml $MASTER:$CONF_DIR
# Pod running process
RUN=$(ssh $MASTER kubectl get po|grep -w $ProJ|wc -l)
if [ $RUN -eq 0 ];then
    ssh $MASTER kubectl apply -f $CONF_DIR/$ProJ-rc.yaml
    ssh $MASTER kubectl apply -f $CONF_DIR/$ProJ-service.yaml
else
    # Delete and Apply
    ssh $MASTER kubectl delete -f $CONF_DIR/$ProJ-rc.yaml
        ssh $MASTER kubectl delete -f $CONF_DIR/$ProJ-service.yaml
    ssh $MASTER kubectl apply -f $CONF_DIR/$ProJ-rc.yaml
        ssh $MASTER kubectl apply -f $CONF_DIR/$ProJ-service.yaml
fi

        点击下面的保存

        点击Build with Parameters,选择Deploy,版本不用输入,默认即可。点击开始构建

        等待任务构建完成后,查看harbor仓库中的ph项目,发现tag就是时间戳

        登陆到k8s的master节点,查看运行中的pod

root@k8s-master:~/kube-conf# kubectl describe po ph-rc-xzbjn 
Name:           ph-rc-xzbjn
Namespace:      default
Priority:       0
Node:           k8s-node1/192.168.10.131
Start Time:     Sun, 29 Sep 2019 17:54:43 +0800
Labels:         app=ph
Annotations:    cni.projectcalico.org/podIP: 192.168.36.99/32
Status:         Running
IP:             192.168.36.99
Controlled By:  ReplicationController/ph-rc
Containers:
  ph:
    Container ID:   docker://a403c9051a3aef451b80fae8765b5380029b36073bbf7f87d8d30f20efd2ee77
    Image:          192.168.10.122/java/ph:1569749673

        可以发现,镜像已经是指定的版本了。

        多点击几次 Build with Parameters,查看harbor的镜像列表

二、回滚

        假设说,现在k8s的ph项目使用的版本是 1569749522,发现有问题,需要回滚到上一个版本1569749773。

        点击  Build with Parameters,选择Rollback,输入版本号。

        查看构建任务的控制台输出

        登录到k8s master节点,查看运行的pod,镜像是否更换了。

root@k8s-master:~/kube-conf# kubectl describe po ph-rc-rjf2w 
Name:           ph-rc-rjf2w
Namespace:      default
Priority:       0
Node:           k8s-node1/192.168.10.131
Start Time:     Sun, 29 Sep 2019 19:38:37 +0800
Labels:         app=ph
Annotations:    cni.projectcalico.org/podIP: 192.168.36.100/32
Status:         Running
IP:             192.168.36.100
Controlled By:  ReplicationController/ph-rc
Containers:
  ph:
    Container ID:   docker://60cf0d1bd21c1f67ddad1ccf6b554111d99d3206e1cb09574fa1cf793540e268
    Image:          192.168.10.122/java/ph:1569749773

        发现已经,更改过来了。

以上是关于Jenkins 版本迭代以及回滚的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+Gitlab通过脚本自动部署回滚web项目版本至服务器集群(测试环境和正式环境),图文详细

k8s在jenkins构建,如何回滚和升级23

Jenkins版本迭代

Ubuntu系统下使用Jenkins进行项目的自动构建还是项目回滚方法

jenkins版本管理

Jenkins 版本从 1.613 升级到最新版本