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

这篇具有很好参考价值的文章主要介绍了【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

目录

参数化构建

安装参数化构建所需插件

源码管理设置传参

脚本传参,部署项目

项目回滚


参数化构建

新创建一个任务 

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

 【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

安装参数化构建所需插件

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

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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

源码管理设置传参

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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

[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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

[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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

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

[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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

项目回滚

我们新部署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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

成功部署

[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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本此时我们回滚1.5,无需提交远程仓库,直接构建

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本

成功,实现秒级回滚

[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

【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚),运维知识分享,# 高级运维知识,jenkins,运维,git,gitlab,代码回滚,Shell,shell脚本


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!文章来源地址https://www.toymoban.com/news/detail-725406.html

到了这里,关于【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins 构建时动态获取参数

    在做jenkins项目时,有些参数不是固定写死的,而是动态变化的,这时我们可以用 Active Choices 插件来远程调用参数 问题解决方案 :执行构建前使用Groovy Scrip调用本地脚本,本地脚本执行获取参数的逻辑 本文所用环境:centos7 、jenkins2.107 Active Choices 插件用于参数动态变化的

    2024年02月04日
    浏览(30)
  • Jenkins参数化构建与触发

    我们在使用Jenkins进行项目构建时,有时会出现两个项目之间关联的情况,比如项目1构建结束后想要直接执行项目2,或者项目1中的某些参数需要传递给项目2来使用,此时可以使用Jenkins的参数化构建方法来完成该过程。 勾选参数化构建过程 选择你想要添加的参数类型 参数定

    2024年02月05日
    浏览(27)
  • Jenkins 参数化构建中 各参数介绍与示例

    一个一个点名,希望补充与矫正,整体如下 布尔值参数,对应的就是Boolean结果,也就是 1 与 0;True or False ;对应【配置】以及【Build with Parameters】时的显示如下 选项参数,即用户从配置的选项列表中,选择其中的一个选项,作为赋值,举例:Color - Red / Blue,那么就只能二选

    2023年04月08日
    浏览(26)
  • Jenkins参数化构建及代码发布

    https://blog.csdn.net/m0_59933574/article/details/134528050?spm=1001.2014.3001.5502 https://blog.csdn.net/m0_59933574/article/details/134528050?spm=1001.2014.3001.5502 Git Centos7及以上 Gitlab Jenkins shell ansible 主机ip 安装服务 192.168.231.241 jenkins,后面称为jenkins端 192.168.231.238         gitlab,后面称为gitlab端 192.168.

    2024年02月04日
    浏览(26)
  • jenkins-cl参数化构建

    pipeline片段(对应jenkins-cli -p参数的BRANCH=develop) 使用 build -p参数 BRANCH=develop (develops是你的分支名),或者下面对应即可 运行

    2024年01月18日
    浏览(27)
  • Jenkins教程|Docker中安装Jenkins(运维及测试必备)

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月05日
    浏览(36)
  • 第五次作业 运维高级 构建 LVS-DR 集群和配置nginx负载均衡

    1、基于 CentOS 7 构建 LVS-DR 群集。 LVS-DR模式工作原理 首先,来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过direct

    2024年02月14日
    浏览(36)
  • 容器部署Jenkins,执行构建任务后,需要执行宿主机上的shell脚本

    遇到的问题:使用docker 部署了一个Jenkins ,Jenkins里执行构建,构建后需要执行宿主机上的shell脚本,这种该如何操作呢。怎么可以退出到宿主机执行shell,最开始挂载了Jenkins_home目录,可以找到shell脚本,但是shell脚本比如cp目录都是对应的宿主机的,在容器里是找不到 步骤一

    2024年02月15日
    浏览(26)
  • 【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

    目录 一、基于 Jenkins+k8s+Git+Docker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的 CI/CD 1.3.1 在 Jenkins 中安装 kubernetes 插件

    2024年01月16日
    浏览(57)
  • jenkins 自由风格部署vue项目,参数化构建vue项目

    1.  丢弃旧的构建 2. 是否需要install  3. git 4. 配置node16:  5. 脚本: 脚本:

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包