Jenkins-Git Parameter 插件实现指定版本的发布和回滚

在上一篇文章的基础设置上进行

1. 机器准备

开发10.0.0.204
gitlab10.0.0.201
jenkins10.0.0.200
web10.0.0.202

2. 开发主机

在开发机器上修改不同版本的前端页面,并打上标签

第一次修改

[root@dev wheel]#vim index.html 
[root@dev wheel]#git commit -am "1.0" 
[master 6914b4e] 1.0
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@dev wheel]#git tag v1.0
[root@dev wheel]#git push --all

第二次修改

[root@dev wheel]#vim index.html 
[root@dev wheel]#git commit -am "2.0" 
[master 6914b4e] 2.0
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@dev wheel]#git tag v2.0
[root@dev wheel]#git push --all

第三次修改

[root@dev wheel]#vim index.html 
[root@dev wheel]#git commit -am "3.0" 
[master 6914b4e] 3.0
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@dev wheel]#git tag v3.0
[root@dev wheel]#git push --all

上传所有标签

 [root@dev wheel]#git push --tags
总共 0(差异 0),复用 0(差异 0),包复用 0
To gitlab.lly.org:devops/wheel.git
 * [new tag]         v1.0 -> v1.0
 * [new tag]         v2.0 -> v2.0
 * [new tag]         v3.0 -> v3.0

3. jenkins 机器

项目发布和回滚一体的脚本

[root@jenkins scripts]#vim wheel-gitlab-deploy-rollback.sh 

HOST_LIST="
10.0.0.202"

APP=wheel

VERSION=`date +%F_%s`
DATA_PATH=/srv
#DATA_PATH=/srv/${APP}-${VERSION}
APP_PATH=/var/www/html

deploy(){
for host in $HOST_LIST;do
   ssh root@$host "mkdir -p  $DATA_PATH/${APP}-${VERSION}  && rm -rf ${APP_PATH}"
   scp -r *  root@$host:$DATA_PATH/${APP}-${VERSION}
   ssh root@$host ln -s $DATA_PATH/${APP}-${VERSION}  ${APP_PATH}
done
}

rollback() {
    for i in ${HOST_LIST};do
        CURRENT_VERISION=$(ssh root@$i "readlink $APP_PATH")
        CURRENT_VERISION=$(basename ${CURRENT_VERISION})
        echo ${CURRENT_VERISION}
        PRE_VERSION=$(ssh root@$i "ls -1 ${DATA_PATH} | grep -B1 ${CURRENT_VERISION}|head -n1 ")
        echo $PRE_VERSION
        ssh root@$i "rm -f  ${APP_PATH}&& ln -sv ${DATA_PATH}/${PRE_VERSION} ${APP_PATH}"
    done
}
case $1 in
deploy)
    deploy
    ;;
rollback)
    rollback
    ;;
*)
    echo "Usage: $0 deploy|rollback"
    ;;
esac

4. jenkins 工具 

jenkins 工具上添加任务(提前下载 git parameter 插件)

根据脚本中的两个函数填写选项参数,并设为变量

选择 git 参数,自动生成标签 

源码管理中,URL 和凭证对应选择(若是 http,则使用用户名密码认证凭证,若是 git,则使用key认证凭证) 

构建步骤选择 excute shell ,填写脚本绝对路径,后面跟上参数变量,运行时可指定函数

执行任务时,则可选择指定发布或是回滚,以及可指定版本

5. web 端验证

使用web 主机 ip 验证前端页面是否按照指定的版本显示 

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

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

相关文章

神经网络10-Temporal Fusion Transformer (TFT)

Temporal Fusion Transformer (TFT) 是一种专为时序数据建模而设计的深度学习模型,它结合了Transformer架构和其他技术,旨在有效地处理和预测时序数据中的复杂模式。TFT 于 2020 年由 Google Research 提出,旨在解决传统模型在时序预测中的一…

vue11.22

数据代理Object.defineproperty ler person { name:张三, sex:男, age:18 } console.log(Object.keys(person)) Object.keys是把对象的属性变成数组 let person { name: 张三, sex: 男, // age: 18 } Object.defineProperty(person, age, { value: 18 }) console.log(Obj…

1、HCIP之RSTP协议与STP相关安全配置

目录 RSTP—快速生成树协议 STP STP的缺点: STP的选举(Listening状态中): RSTP P/A(提议/同意)机制 同步机制: 边缘端口的配置: RSTP的端口角色划分: ensp模拟…

【python系列】Python数据类型转换详解

在编程中,数据类型的正确使用和转换是开发中常见且重要的操作之一。Python 提供了隐式和显式两种数据类型转换方式。本文将详细介绍数据类型的基本概念、隐式和显式转换的区别与操作,并提供练习题帮助理解。 1. 数据类型概念及数据类型之间的区别 Pytho…

新160个crackme - 102-haggar-keyme1

运行分析 用win7或win xp系统可以运行输入Serial,点击Check无反应 PE分析 ASM程序,32位,无壳 静态分析&动态调试 ida找到关键字符串 在sub_401E6B处按x,返回上一步函数 来到关键函数,静态分析逻辑如下:…

LCR-003比特位计数

一.题目: . - 力扣(LeetCode) 二.我的原始解法-一次性通过的python内置bin函数解法: 思路和题目描述一致,就是把0-n的每个数字转为二进制,计算这个二进制中1的个数添加到返回数组中,掌握基础函…

动态求连续区间和(线段树 树状数组)

向上更新,建树,求区间和,修改节点值 向上更新: 返回左右节点值的和 建树: 如果是叶子节点,赋值结构体的左区间,右区间,值 如果不是叶子节点,那么先求中点&#xff0c…

聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透

一、窗口 窗口(Window)是处理无界流的关键所在。窗口将流分成有限大小的“桶”,我们可以在其上应用算子计算。Flink可以使用window()和windowAll()定义一个窗口,二者都需要传入一个窗口分配器WindowAssigner,WindowAs…

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日,第十三届中国创新创业大赛(广东广州赛区)暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍:广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛(广东广州赛区…

2024强网拟态决赛-eBeepf

漏洞分析与利用 分析后面看情况吧&#xff0c;有时间再写吧&#xff0c;先贴个利用脚本&#xff1a; #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <…

Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE

近期 Jetbrains 可以说是动作不断&#xff0c;我们刚介绍了 IntelliJ IDEA 2024.3 K2 模式发布了稳定版支持 &#xff0c;而在官方最近刚调整过的 Kotlin Multiplatform Roadmap 优先关键事项里&#xff0c;可以看到其中就包含了「独立的 Kotlin Multiplatform IDE&#xff0c;…

RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机

开源一个有限范围计数器模块。c语言的。 可以用于单片机 这个类的用途是 实现一个小范围&#xff08;比如从0~314&#xff0c;或者-100到100&#xff09;的整数&#xff0c;可以智能 --操作。 超过范围可以不再增长&#xff08;可以理解为上饱和&#xff0c;或者下饱和&#xf…

RK3588适配MTK7921 USB接口WiFi驱动开发

在当前RK原厂提供的SDK里面已经适配的WiFi模组有不少,但是支持的模组大部分集中在realtek、正基、英飞凌等厂家。主要型号有Realtek的RTL8188系列、RTL8723系列、RTL8812系列、RTL8821系列、RTL8822系列和支持WiFi 6 的RTL8852系列,正基的AP6275系列、AP6276系列等。接下来将…

38_转置卷积

转置卷积也被称为&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为fractionally_strided convolution、deconvolution。 转置卷积不是卷积的逆运算。 转置卷积也是卷积 转置卷积的作用是上采样。 1. 基础概念 转置卷积&#xff08;Transposed Convolution…

【Linux】内核的编译和加载

Linux内核是操作系统的核心&#xff0c;负责管理系统的硬件资源&#xff0c;并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

C++适配器模式之可插入适配器的实现模式和方法

可插入适配器与Adaptee的窄接口 在C适配器模式中&#xff0c;可插入适配器&#xff08;Pluggable Adapter&#xff09;是指适配器类的设计允许在运行时动态地插入不同的Adaptee对象&#xff0c;从而使适配器具有灵活性和可扩展性。这种设计使得适配器不仅限于适配一个特定的Ad…

mybatis-plus方法无效且字段映射失败错误排查

问题&#xff1a; Invalid bound statement (not found): com.htlc.assetswap.mapper.WalletMapper.insert&#xff0c;并且select * 进行查询时带下划线的字段未成功映射。 排查&#xff1a; 1.检查WalletMapper接口&#xff0c;确保继承自BaseMapper 2.启用驼峰命名法映射。a…

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求&#xff1a;利用QPainter绘制点、线、圆、矩形、文字&#xff1b;设置画笔改为红色&#xff0c;宽度为…

使用IDEA构建springboot项目+整合Mybatis

目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单&#xff0c;springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器&#xff0c;其默认嵌入的容器是 Tomcat&#xff0c;…

【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现

开题报告 随着互联网的普及和数字娱乐产业的蓬勃发展&#xff0c;电影作为一种重要的娱乐方式&#xff0c;已经深入人们的日常生活。然而&#xff0c;面对海量的电影资源&#xff0c;用户在选择观影内容时常常感到困惑和无所适从。传统的电影推荐方式&#xff0c;如人工筛选、…