5.代码自动上线—Jenkins基于tag实现版本发布

2022-03-17 分类:git-jenkins 阅读(585) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.为什么要让项目支持tag版本方式上线

由于之前上线方式是直接获取最新代码,那么会造成后期回退变的困难。那如果采用tag方式,比如第一次上线v1.1、第二次上线v1.2、如果上线v1.2出现问题,那么我们可以快速回退至上一个版本v1.1。

2.实现tag版本上线方式思路

1.开发如果需要发布新版本,必须将当前的版本打上一个标签。
2.jenkins需要让其脚本支持传参,比如用户传递v1.1则拉取项目的v1.1标签

3.实战Jenkins部署tag版本

1.首先安装Git Parameter插件,然后配置Jenkins参数化构建,让用户在构建时选择对应的tag版本

选择添加git参数,当然也可以选择文本参数或者选项参数。Git参数可以自动获取git的标签

如下图配置git的参数

如果分支不指定变量调用标签的话,默认去拉取最新的分支了
指定执行的脚本

2.jenkins发布脚本,整体文件如下

[root@jenkins /script]# cat html_deploy_tag.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Pkg_Name=web_monitor_${Date}_${code_tags}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"
tar_code () {
  #1.进入到代码的目录下($WORKSPACE)
  #2.打包存放至本地jenkins服务器的/opt
  cd $WORKSPACE && \
  tar czf ${Web_Dir}/${Pkg_Name}.tar.gz ./*
}
scp_code() {
  #3.使用scp将代码包分发至web集群
  #4.通过ssh命令登录web集群主机,执行目录创建,解压,软件连接等操作
  for i in ${Web_Server}
  do
    scp -rp ${Web_Dir}/${Pkg_Name}.tar.gz root@${i}:${Web_Dir}
    ssh root@${i} "cd ${Web_Dir} && \
                       mkdir ${Pkg_Name} -p && \
                       tar xf ${Pkg_Name}.tar.gz -C ${Pkg_Name} && \
                       rm -f ${Web_Dir}/${Pkg_Name}.tar.gz && \
                       rm -f /code/html && \
                       ln -s ${Web_Dir}/${Pkg_Name} /code/html"
  done
}
deploy (){
    tar_code
    scp_code
}
    deploy

3.开发使用git打标签并提交至gitlab,运维执行构建操作

可以看到git上有两个标签

此时再去jenkins执行构建操作

从上图可以看出jenkins的标签和gatlab上的一样

4.通过浏览器访问项目网站,检查是否更新为修改后的版本

执行两个标签,看是否按照标签发布对应的代码

4.Jenkins实现版本回滚

1.在Jenkins添加一个freestyle的job,配置文本的参数化构建,最后编写脚本实现回滚功能

[root@jenkins scripts]# cat /scripts/html_rollback.sh
#!/usr/bin/bash
# 回退脚本
# 1.登陆目标集群服务
# 2.删除软连接、重建软连接
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"

for host  in ${Web_Server}
do
    ssh root@${host} "if [ -d ${Web_Dir}/web-monitor-*_${git_version} ];then
                        rm -f /web
                        ln -s ${Web_Dir}/web-monitor-*_${git_version} /web
                        echo "web-monitor 项目回退至 ${git_version} 版本成功"
                    else
                        echo "版本填写错误,退出"
                        exit 1
                    fi"
done

2.发现此前部署的v1.2有很多Bug。现在想回退至v1.1版本,找到回退的job,填写回退的版本号即可

5.Jenkins重复构建项目处理

前面我们已经实现代码按照版本的方式发布与回退了,但是还有一个问题,如果我此前部署过v1.1,如果我不小心在部署了一次v1.1还是会提示部署成功。那能否实现,部署过的版本不允许再次重复部署

# 在此前tags部署脚本的开头加上如下判断。
#如果是部署,需要检查是否已经部署过该tag版本,如果部署过则不允许重复构建
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
        echo ""
        echo "你已经成功部署过 ${GIT_COMMIT} 他对应的Tags  ${git_version}"
        echo "请不要尝试无需重复部署." && exit 1
        echo ""
fi

测试重复构建同一个版本会出现什么情况呢

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1