【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚)

之前我们介绍的大多是测试环境的推送,在生产环境中,我们不会用到那么多次的构建测试,但是会涉及稳定版本的发布和回滚,我们也通过jenkins配合gitlab去实现,通过远程仓库的tag传递参数,我们把这种方式称为参数化构建,在参数化构建的过程中,我们省略了代码质量检测、java项目省略了编译(可以提前编译好放入gitlab仓库)、省略了第三方软件提示(由于是运维人员操作,无需配置发布成功的提示给开发看)等等步骤,实现了秒级发布与回滚操作。

就像上篇文章【运维知识高级篇】超详细的Jenkins教程3(Maven项目上线全流程)-CSDN博客展示的效果一样,这篇文章我们详细介绍下参数化构建、脚本传参、代码发布与回滚等功能,让大家更好的去理解使用。

目录

参数化构建

安装参数化构建所需插件

源码管理设置传参

脚本传参,部署项目

项目回滚


参数化构建

新创建一个任务

测试下设置的变量,执行的节目会自动变成参数化执行

安装参数化构建所需插件

在可选插件中搜索Git Parameter 直接安装即可,已安装则忽略此步骤

进入到项目中把文本参数去掉,重新选择使用git parameter,会更加方便

源码管理设置传参

把git拉取代码的master更改为$git_version变量

复制代码
[root@Gitlab git_xiaobawang]# cat deploy_rollback.sh
#!/bin/sh
CODE_DIR="/var/lib/jenkins/workspace/git_version/"
WEB_DIR="/code/xiaobawang/"

get_code_tar(){
        cd $CODE_DIR && tar zcf /opt/xiaobawang_${git_version}.tar.gz ./*
}

scp_code_web(){
        scp /opt/xiaobawang_${git_version}.tar.gz 10.0.0.7:$WEB_DIR
}

code_tarxf(){
        ssh 10.0.0.7 "cd $WEB_DIR && mkdir xiaobawang_${git_version} && tar xf xiaobawang_${git_version}.tar.gz -C xiaobawang_${git_version} && rm -rf xiaobawang_${git_version}.tar.gz"

}
ln_html(){
         ssh 10.0.0.7 "cd $WEB_DIR && rm -rf game && ln -s xiaobawang_${git_version} game"
}

main(){
        get_code_tar;
        scp_code_web;
        code_tarxf;
        ln_html;
}

#当重复执行构建后会生成多个相同版本的文件,利用jenkins变量值解决重复性构建问题
#jenkins变量
#1. GIT_COMMIT 当前版本提交产生的哈希唯一值
#2. GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
#使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断

if [ "$deploy_env" == "deploy" ];then
    if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
        echo "构建失败该 $git_version 版本号已部署"
    else
    main
    fi
elif [ "$deploy_env" == "rollback" ];then
        ln_html
fi

脚本传参,部署项目

我们通过shell脚本去判断参数是部署还是回滚,部署和回滚操作不一致,我们都是通过软链接的方式去替换我们的代码,如果是回滚则直接删除软链接,链接到之前的版本,如果是部署,则传递到正式环境新的代码文件再删除软件链接,链接到新版本上

同样需要注意脚本的推送,提前做jenkins的免密钥

复制代码
[root@Gitlab git_xiaobawang]# cat index.html|grep v1.4
                    ['超级魂斗罗v1.4', 'roms/cjhdl.nes'],
[root@Gitlab git_xiaobawang]# git commit -am "v1.4"
[master cffa0e9] v1.4
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@Gitlab git_xiaobawang]# git tag -a "v1.4" -m "v1.4"
[root@Gitlab git_xiaobawang]# git push -u origin v1.4
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 395 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@10.0.0.200:root/xiaobawang.git
 * [new tag]         v1.4 -> v1.4

#扩展
[root@Gitlab git_xiaobawang]# git tag -d v1.4        #删除本地仓库的tag
Deleted tag 'v1.4' (was 663bef9)
[root@Gitlab git_xiaobawang]# git push origin :v1.4  #删除远程仓库的tag
To git@10.0.0.200:root/xiaobawang.git
 - [deleted]         v1.4

此处注意需要选中v1.4,点一下,再点击开始构建

由于我反复测试,之前构建过,所以提示已经构建,我们改下代码文件试下v1.5

复制代码
[root@Gitlab git_xiaobawang]# cat index.html 
......
                    ['超级魂斗罗v1.5', 'roms/cjhdl.nes'
......
[root@Gitlab git_xiaobawang]# git commit -am "v1.5"
[master 9e59f67] v1.5
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@Gitlab git_xiaobawang]# git tag -a "v1.5" -m "v1.5"
[root@Gitlab git_xiaobawang]# git push -u origin v1.5
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 394 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@10.0.0.200:root/xiaobawang.git
 * [new tag]         v1.5 -> v1.5

代码文件和访问也没有问题

复制代码
[root@Web01 xiaobawang]# ll
total 0
lrwxrwxrwx 1 root root  15 May 23 17:36 game -> xiaobawang_v1.5
drwxr-xr-x 6 root root 154 May 23 17:36 xiaobawang_v1.5

项目回滚

我们新部署v1.6,再回滚至1.5

复制代码
[root@Gitlab git_xiaobawang]# cat index.html|grep v1.6
                    ['超级魂斗罗v1.6', 'roms/cjhdl.nes'],
[root@Gitlab git_xiaobawang]# git commit -am "v1.6"
[master 614afd0] v1.6
 2 files changed, 2 insertions(+), 2 deletions(-)
[root@Gitlab git_xiaobawang]# git tag -a "v1.6" -m "v1.6"
[root@Gitlab git_xiaobawang]# git push -u origin v1.6
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 478 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 0 (delta 0)
To git@10.0.0.200:root/xiaobawang.git
 * [new tag]         v1.6 -> v1.6

成功部署

复制代码
[root@Web01 xiaobawang]# ll
total 0
lrwxrwxrwx 1 root root  15 May 23 17:42 game -> xiaobawang_v1.6
drwxr-xr-x 6 root root 154 May 23 17:36 xiaobawang_v1.5
drwxr-xr-x 6 root root 154 May 23 17:42 xiaobawang_v1.6

此时我们回滚1.5,无需提交远程仓库,直接构建

成功,实现秒级回滚

复制代码
[root@Web01 xiaobawang]# ll
total 0
lrwxrwxrwx 1 root root  15 May 23 17:43 game -> xiaobawang_v1.5
drwxr-xr-x 6 root root 154 May 23 17:36 xiaobawang_v1.5
drwxr-xr-x 6 root root 154 May 23 17:42 xiaobawang_v1.6

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关推荐
用户0328472220701 小时前
如何搭建本地yum源(上)
运维
深海鱼在掘金2 天前
Git 完全指南 —— 第1章:Git 概览与版本控制演进
git
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
noravinsc3 天前
关于Git Flow
git