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

相关推荐
427724001 分钟前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
技术小齐4 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风4 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕4 小时前
C语言-进程
linux·运维·服务器
chenbin5204 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯5 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹5 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
sszdzq6 小时前
Docker
运维·docker·容器
book01216 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
bugtraq20217 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu