【运维知识高级篇】超详细的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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关推荐
但老师7 分钟前
Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
git
秃头女孩y8 分钟前
git创建分支
git
苹果醋323 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰37 分钟前
[linux]docker基础
linux·运维·docker
Jason-河山1 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技1 小时前
SAP Business One市场价格解析
运维·sap·erp
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
爱吃喵的鲤鱼2 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++