热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建根据构建号回滚

本例声明

本例中的物料:

1.Jenkins   docker容器版

2.Gitlab  docker容器版

3.springboot项目

4.maven构建

本例中的特殊术语:

“部署构建”:用于部署的构建,这种构建会在Gitlab中下拉master分支中的最新的代码,然后使用maven进行的构建并发布到生产环境。

“回滚构建”:用于回滚的构建,根据构建号进行回滚,Jenkins会取出备份的文件,然后将其发布到生产环境。

本例中的“部署构建”条件:

在分支合并到master的请求经过研发经理审批以后merge的瞬间进行“部署构建”

如果发布后出现bug,可以手工回滚到指定的构建版本

本例配置

使用gitlab触发Jenkins构建的步骤不再赘述,请大家参考:

GitLab触发jenkins构建项目

基于gitlab和jenkins的自动化部署实例

下面我们重点讲一下Jenkins配置:

有时候我们发布完成后发现有很大的bug需要马上回滚到上一个版本:

在Jenkins中“新建任务”-->"构建一个***风格的软件项目"在项目的。

在项目配置的“General”--“参数化构建”

1.添加选项参数

名称:

deploy_evt

选项:

deploy

rollback

描述:

deploy:发布,rollback:回滚

2.添加字符参数

名称:

buildNum

默认值:

0

描述:

需要回滚到的构建号,发布时忽略该参数

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

 

源码管理:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

 

构建触发器:

我使用的是在分支代码合并到master然后在合并申请接受后的情况下才出发构建,所以不选push事件:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

构建环境

选择输出时间戳:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

构建(最关键发部分):

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

脚本:

case $deploy_evt in
	deploy)
    	echo "deploy:$deploy_evt"
        /var/jenkins_home/maven/apache-maven-3.6.1/bin/mvn -s /var/jenkins_home/maven/apache-maven-3.6.1/conf/settings.xml clean install -Dmaven.test.skip=true
        path="${WORKSPACE}/bak"
   		 if [ -d $path ];
    		then
       		 echo "The files is already  exists "
   		 else
       		 mkdir -p  $path
   		 fi
    	cd ${WORKSPACE}
        rm -rf *.tar.gz
   		  tar czf bak/${JOB_NAME}-${BUILD_NUMBER}.tar.gz target/*.jar --exclude=bak
    		find $path  -mtime 2 -name "*.tar.gz"  -exec rm -rf {} \;
    		echo "Deployment Completed!"
    	;;
    rollback)
    	echo  "rollback:$deploy_evt"
        echo "buildNum:"$buildNum
        rm -rf target
        cd ${WORKSPACE}
        rm -rf *.tar.gz
        if [ -f bak/${JOB_NAME}-$buildNum.tar.gz ];
        then
        	cp bak/${JOB_NAME}-$buildNum.tar.gz ${WORKSPACE}
        	tar -zxvf ${JOB_NAME}-$buildNum.tar.gz
        	echo  "Rollbacked To build Number:$buildNum"
        	pwd && ls
        else
        	echo  "------------------------------------------------------------------------------------------------------------------------------ "
        	echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
        	echo  "Build Number $buildNum is a Rollback build number ;Please chose a deploy build number!"
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "
            echo  "------------------------------------------------------------------------------------------------------------------------------ "

            cp bak/${JOB_NAME}-$buildNum.tar.gz ${WORKSPACE}
        fi
        ;;
        *)
        exit
        	;;
esac
        

注:

1.apache-maven-3.6.1这个是自己安装的(因为是绿色版,复制进容器然后解压缩)。

2.思路在“发布构建”的时候将spring生成的jar包进行打包(根据构建号打包)并放在项目bak(自己新建的一个文件夹)的文件夹下面;

回滚的时候将对应的构建号的压缩包拿出来解压。然后部署生产环境;

3.由于这里有两种构建方式:“部署构建”和“回滚构建”,我们在回滚的时候需要选择“部署构建”的构建号,如果回滚的时候选择“回滚构建”的构建号是不能成功构建的。这种情况的构建失败有以下提示信息:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

 

构建后操作:发布到生产环境

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

这样在构建完成后可以将程序发布到服务器:

startjk-rtd.sh

#!/bin/bash
chmod 777 /home/zhangsan/abc/abc-1.0.0-SNAPSHOT.jar
echo "开始启动......"
nohup java -jar abc-1.0.0-SNAPSHOT.jar > /dev/null &
echo "启动成功!"

stopjk-rtd.sh

#!/bin/bash
echo "stop SpringBoot abc Application"
pid=`ps -ef | grep abc-1.0.0-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
echo  "应用进程id:$pid"
if [ -n "$pid" ]
then
kill -9 $pid
echo "停止成功!"
fi

 

Gitlab侧:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

关于1和2处的信息在Jenkins的触发构建中找到:

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

这样就可以实现合并成功后发布了。

构建的使用

一、gitlab自动构建

在分支合并到master的请求经过研发经理审批以后merge的瞬间进行自动“部署构建”。

二、手动“部署构建”

点击项目,选择“Build with Parameters”

deploy_evt下拉菜单选择deploy

buildNum 参数忽略不写

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

击“开始构建”即可。

三、手动“回滚构建”

点击项目,选择“Build with Parameters”

deploy_evt下拉菜单选择rollback

buildNum选择需要回滚到的构建号,

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

比如上图的构建号是:45

Gitlab触发Jenkins部署(deploy)构建和手动回滚(rollback)构建--根据构建号回滚

点击开始构建,回滚构建完成!

 

 

 

 

 

 

 


推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
author-avatar
用最优秀的你去面对爱你的人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有