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

news2024/11/26 4:49:55

之前我们介绍的大多是测试环境的推送,在生产环境中,我们不会用到那么多次的构建测试,但是会涉及稳定版本的发布和回滚,我们也通过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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业会议新闻稿怎么写?会议类新闻稿如何撰写?

企业会议新闻稿是企业对外传递信息的重要途径之一,它能够将企业的决策、动态以及成果展示给公众。本文伯乐网络传媒将详细解析企业会议新闻稿的写作要点和技巧,以及常见问题及解决方法,帮助大家更好地完成企业会议新闻稿的撰写工作。 一、企业…

Spring Mvc的相关知识

一、初识MVC 1.Spring Mvc 是控制层的Spring框架,替换Servlet,除了它以外,还有 struct1和 struct2 区别: 1.struct1被struct2 取代 2.struct2:采用 prototype多例模式,内存消耗快,经常会出现内存…

RocketMQ Promethus Exporter

介绍​ Rocketmq-exporter 是用于监控 RocketMQ broker 端和客户端所有相关指标的系统,通过 mqAdmin 从 broker 端获取指标值后封装成 87 个 cache。 警告 过去版本曾是 87 个 concurrentHashMap,由于 Map 不会删除过期指标,所以一旦有 la…

python实现遗传算法,并绘制训练过程以及参数对比

前言: 本实验使用遗传算法寻找3维函数的最大/最小值,并对基因位数,种群初始大小,每次死亡个数,适应度计算方式这些参数进行修改,对比结果。 初始代码如下: import numpy as np import matplotlib.pyplot …

【atcoder】abc312~abc321题解

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312) A 把信息存进去然后找就行。 B 枚举右上角,然后模拟判断即可。 C 二分这个 X X X ,然后判断即可。 D 典型的括号类的 d p dp dp 。 d p i , j dp_{i, j} dpi,j​…

Python大数据之Python进阶(二)多任务编程-进程

文章目录 多任务编程-进程本章节学习目标本章节常用单词 多任务的介绍1. 提问2. 多任务的概念多任务3. 多任务的执行方式4. 小结 进程1. 进程的介绍2. 进程的概念3. 进程的作用4. 小结 多任务编程-进程 本章节学习目标 能够知道多任务的执行方式能够知道进程的作用能够使用多…

代理IP对企业网络安全的重要性

随着科技的快速发展,网络已经成为企业运营的重要工具,然而与发展相伴的网络安全问题也日趋复杂,为了降低数据和隐私泄露的风险,企业必须给予足够的重视,采取全面的网络安全应对措施来降低风险,维护企业形象…

VS报错无法解析的外部符号.....

VS报错无法解析的外部符号... 我们在使用VS编译器编写C代码运行时提示:严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)” (?invoke_mainYAHXZ) 中引用了该符号 StudyC…

webstorm卸载安装新版本后启动报错

问题描述 ​ 卸载了之前的2020版本然后安装2023版,安装之后打开出现如上错误 ​ 解决办法 --- 安装以下软件并在上面下载webstorm 安装:JetBrains Toolbox App 推测:应该是旧版本未卸载干净

电脑突然提示mfc140u.dll丢失,缺失mfc140u.dll无法运行程序的解决方法

在当今信息化社会,电脑已经成为我们生活和工作中不可或缺的一部分。然而,随着技术的不断发展,电脑也会出现各种问题。其中,最常见的问题之一就是“mfc140u.dll丢失”。那么,当我们遇到这个问题时,应该如何解…

GAN学习笔记

1.原始的GAN 1.1原始的损失函数 1.1.1写法1参考1,参考2 1.1.2 写法2 where, G Generator D Discriminator Pdata(x) distribution of real data P(z) distribution of generator x sample from Pdata(x) z sample from P(z) D(x) Discriminator network G…

Redis key基本使用

查看key的数据类型 string 、hash等 type key 查看key是否存在 exist key1 查看key的有效期 -1:永不过期 -2:已过期 设置key过期时间 expire key seconds expireat key 日期 key移动到其它库 move key index redis 默认是16个库 0,1,2,…15 切换数据库【…

箱讯科技成功闯入第八届“创客中国”全国总决赛—在国际物流领域一枝独秀

添加图片注释,不超过 140 字(可选) 2023年9月26日,第八届“创客中国”数字化转型中小企业创新创业大赛决赛在贵州圆满收官。 经过初赛、复赛、决赛的激烈角逐,箱讯科技与众多强劲对手同台竞技,最终凭借出…

ROS系统通过类定义实现数据处理并重新发布在另一话题

在实际应用中,经常需要在同一个节点内接受数据,在回调函数中将数据进行处理,再将新数据重新发布在另一个新话题上。 实现步骤: 1. 定义一个数据处理类SubscribeAndPublish,设置2个pub成员对象和1个sub成员对象为publ…

pip安装报错 RuntimeError:Python version 2.7 or 3.4+ is required——解决办法

使用pip install安装第三方库时报错,错误如下:本机安装的是python3.11,已经大于3.4了,但还是会报错。 1、原因 由于存在字符串比较的一个bug,在检查python版本时,会逐个字符进行比较(4>1&a…

新手学PCB画板选什么软件

Protel、AD、PADS与Allegro的比较与选择 1.Protel 早期使用较多,现在已经不在流行,少部分工程师能在使用。 优点:1.对新人友好,容易上手,所以学校教学首选这个。2.对电脑要求配置低,一般的电路设计都能实…

Qt扩展-KDDockWidgets 的使用

KDDockWidgets 的使用 一、概述二、原理说明三、代码实例1. 项目简述2. 布局源码 一、概述 KDDockWidgets 的使用相对比较简单,建议直接参考 其提供的例子。 二、原理说明 在这种多窗口布局显示的使用最常用的就是这两个类, 也就是 MainWindow 和 Doc…

No127.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

SpringBoot RestControllerAdvice异常处理适配原理

在项目中我们经常通过RestControllerAdviceExceptionHandler一起来实现全局的异常处理。 以下是示例代码: package com.xulu.monitor.test;import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.Rest…