三、gitlab+Jenkins+nginx实现项目tag版本方式发布

一、Jenkins实现项目tag版本方式发布

1.1 为什么要通过tag发布

#由于之前上线方式是直接获取最新代码,那么会造成后期回退变的困难。那如果采用tag方式,比如第一次上线v1.1、第二次上线v1.2、如果上线v1.2出现问题,那么我们可以快速回退至上一个版本v1.1。
- 实现tag版本上线方式思路

1.开发如果需要发布新版本,必须将当前的版本打上一个标签。
2.Jenkins需要让其脚本支持传参,比如用户传递v1.1则拉取项目的v1.1标签的代码。
#请结合之前的文章一起查看呦!!!

1.2 安装Git Parameter插件

Git Parameter
#这个插件允许你在你的构建中分配git分支、标签、拉取请求或版本号作为参数。
#主要是为了标签的功能!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3W1WJ3ML-1689342490734)(E:\教学资料\※笔记※\复习\assets\image-20230711094313928.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qt2FluAw-1689342490735)(E:\教学资料\※笔记※\复习\assets\image-20230711094532086.png)]

1.3 使用插件配置Jenkins

1、在General配置gitlab的自定义参数
#设置变量名对应tag标签
2、源码管理页面修改为通过tag拉取代码
#默认是通过指定的分支。构建开始会先拉取代码到workspace
3、构建页面的变化
#因为安装了git_parameter并且在配置中的Gemaral配置了采用结构化参数构建。所以显示可以通过tag进行发布!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N08IVAkm-1689342490736)(E:\教学资料\※笔记※\复习\assets\image-20230711095427386.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nD1ouT2L-1689342490736)(E:\教学资料\※笔记※\复习\assets\image-20230711095742446.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LNkrETuz-1689342490737)(E:\教学资料\※笔记※\复习\assets\image-20230711100258801.png)]

1.4 gitlab给项目代码打标签

1、校验本地代码环境没有未提交的数据,否则会冲突!!!
[root@jenkins webhp]# git status
# On branch main
nothing to commit, working directory clean
2、拉取最新代码
#正式环境可能别人已经发布过新的代码。
[root@jenkins webhp]# git pull origin main
From 192.168.222.133:devops/webhp
 * branch            main       -> FETCH_HEAD
Already up-to-date.
3、提交tag到本地仓库
[root@jenkins webhp]# git tag -a "v1.0" -m "v1.0版本代码提交"		#新增标签并添加描述
#正常流程先提交代码。本地没有改动后打标签。根据本地最新的代码进行标签的构建!!!
[root@jenkins webhp]# git tag
v1.0
4、提交tag到远端仓库gitlab
[root@jenkins webhp]# git push origin v1.0						#推送到远端仓库
Counting objects: 1, done.
Writing objects: 100% (1/1), 182 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@192.168.222.133:devops/webhp.git
 * [new tag]         v1.0 -> v1.0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jEV03MX-1689342490737)(E:\教学资料\※笔记※\复习\assets\image-20230711101754683.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qobAJuHS-1689342490737)(E:\教学资料\※笔记※\复习\assets\image-20230711101827624.png)]

1.5 通过tab发布webhp项目

1、查看目前nginx的前端项目的版本
#之前做了nginx的配置默认访问的是webhp的前端项目!!!
2、修改索引页面
<h1 style="color: blue; text-align: center; width: 1500px; background-color:cornsilk; height: 50px;">强强科技集团-v2.0版本</h1>
3、建立标签v2.0
[root@jenkins webhp]# git tag -a "v2.0" -m "v2.0版本代码提交"
[root@jenkins webhp]# git tag
v1.0
v2.0
[root@jenkins webhp]# git push origin v2.0
Counting objects: 1, done.
Writing objects: 100% (1/1), 183 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@192.168.222.133:devops/webhp.git
 * [new tag]         v2.0 -> v2.0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXdBCxdE-1689342490738)(E:\教学资料\※笔记※\复习\assets\image-20230711102335641.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QE5bCLNs-1689342490738)(E:\教学资料\※笔记※\复习\assets\image-20230711103131378.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHeOThh8-1689342490738)(E:\教学资料\※笔记※\复习\assets\image-20230711103524106.png)]

1.6 通过tag发布新版本

1、jenkins服务器的默认工作空间还是老版本
[root@jenkins workspace]# ls
webhp-gitlab项目-线上发布
2、修改线上发布脚本。通过tag发布
#选择2.0开始构建
[root@jenkins ~]# cat /root/shell/webhp_publish_tag.sh 
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H)      #定义时间戳变量
webhp_dir="/root/webhp"                                  #nginx指定的前端路径
web_host="192.168.222.133"
#WORKSPACE="/var/lib/jenkins/workspace"         #注释就获取Jenkins传入的内置变量。
Name=${DATE}-${git_version}             #git_version是在Jenkins项目配置中General中Git Parameter那里设置的变量名字.就是tag

#思路:
#1.Jenkins将Gitlab代码拉取至工作目录后,需先将项目代码打包

get_code(){
        find $WORKSPACE -name "*tmp" | xargs rm -rf                     #删除生成的临时文件
        tar -zcf /opt/webhp-${Name}.tar.gz -C $WORKSPACE .      #将workspace目录下的内容压缩到opt/webhp-data.tar.gz
        #WORKSPACE 是一个内置的环境变量,它表示当前构建的工作目录。每个 Jenkins 构建都会在主机上创建一个唯一的工作目录

}

copy_code(){
        scp -r /opt/webhp-${Name}.tar.gz root@${web_host}:/opt
        ssh root@${web_host} "mkdir -p /opt/webhp-${git_version} && \
        tar -xf /opt/webhp-${Name}.tar.gz -C /opt/webhp-${git_version} && \
        ls -l /opt && \
        cp -rf ${webhp_dir} ${webhp_dir}.bak.${DATE} && \
        rm -rf ${webhp_dir} && \
        mv /opt/webhp-${git_version} ${webhp_dir}"
}

deploy(){
        get_code
        copy_code
}

deploy
3、查看Jenkins的构建日志
#看到日志提示发布成功!!!
4、查看nginx的结果
#完美发布成功!!!

5、git提取新的tag到本地
git fetch
git checkout v1.0			#切换tag代表不同的标签的状态代码!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdYOSpuS-1689342490739)(E:\教学资料\※笔记※\复习\assets\image-20230711103735441.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbXWu2Zo-1689342490739)(E:\教学资料\※笔记※\复习\assets\image-20230711104916995.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sg0ggz5s-1689342490739)(E:\教学资料\※笔记※\复习\assets\image-20230711112520253.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-do3VMbvR-1689342490740)(E:\教学资料\※笔记※\复习\assets\image-20230711112116832.png)]

二、Jenkins实现tag版本的回退

1.1 编写支持版本回退的脚本

1、增加回滚按钮根据,Jenkins Gerneal选择变量内容!!!
[root@jenkins ~]# vim /root/shell/webhp_publish_tag_rollback.sh 
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H)      #定义时间戳变量
webhp_dir="/root/webhp"                                  #nginx指定的前端路径
web_host="192.168.222.133"
#WORKSPACE="/var/lib/jenkins/workspace"         #注释就获取Jenkins传入的内置变量。
Name=${DATE}-${git_version}             #git_version是在Jenkins项目配置中General中Git Parameter那里设置的变量名字.就是tag

#思路:
#1.Jenkins将Gitlab代码拉取至工作目录后,需先将项目代码打包

get_code(){
        find $WORKSPACE -name "*tmp" | xargs rm -rf                     #删除生成的临时文件
        tar -zcf /opt/webhp-${Name}.tar.gz -C $WORKSPACE .      #将workspace目录下的内容压缩到opt/webhp-data.tar.gz
        #WORKSPACE 是一个内置的环境变量,它表示当前构建的工作目录。每个 Jenkins 构建都会在主机上创建一个唯一的工作目录

}

copy_code(){
        scp -r /opt/webhp-${Name}.tar.gz root@${web_host}:/opt
        ssh root@${web_host} "mkdir -p /opt/webhp-${git_version} && \
        tar -xf /opt/webhp-${Name}.tar.gz -C /opt/webhp-${git_version} && \
        ls -l /opt && \
        cp -rf ${webhp_dir} ${webhp_dir}.bak.${DATE} && \
        rm -rf ${webhp_dir} && \
        cp -rf  /opt/webhp-${git_version} ${webhp_dir}"
}

deploy(){
        get_code
        copy_code
}

rollback(){
	backfile=$(ssh root@${web_host} "find /opt/ -name "webhp-${git_version}" -type d")
	ssh root@${web_host} "ls -l /opt && \
	rm -rf ${webhp_dir} && \
	cp -rf  /opt/webhp-${git_version} ${webhp_dir}"
}

#根据Jenkins项目中配置的选项参数变量deploy_env的值来判断执行哪一个脚本函数(部署脚本还是回退脚本)
if [ $deploy_env == "deploy"  ]; then
   deploy
elif [ $deploy_env == "rollback" ]; then
   rollback
fi


#回退脚本是通过本身前端机器解压后在/opt下存的备份文件进行上一版本的回退。无需在拉取等操作!!!

1.2 Jenkins添加参数化构建选项参数变量

1、在General中配置选择参数
#通过构建开始前选择的参数选定部署还是回退!!!
2、配置必要的选项
#名称是判断条件
#选项是参数不同的参数不同的运行方式
3、修改拉取代码后的构建脚本
#修改为支持回滚操作的脚本
4、构建页面变成了可以携带参数的构建方式
#这样可以快速回滚和上线,无需人工操作!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWa8Ony4-1689342490740)(E:\教学资料\※笔记※\复习\assets\image-20230711163329539.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rxe8UUhI-1689342490740)(E:\教学资料\※笔记※\复习\assets\image-20230711163754236.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Cz4kev7-1689342490741)(E:\教学资料\※笔记※\复习\assets\image-20230711163850537.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOV0pTUf-1689342490741)(E:\教学资料\※笔记※\复习\assets\image-20230711164322578.png)]

1.3 测试回滚发布操作

1、目前webhp是3.0版本
#先发一个4.0确保web端机器的/opt下存在备份内容
2、发布4.0
#选择v4.0版本,
3、查看结果
#发布正常
4、测试回滚操作
#选择v3.0,点击rollback
5、查看回滚的结果
#回滚正常。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rU7Mxixj-1689342490741)(E:\教学资料\※笔记※\复习\assets\image-20230711164456310.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3pSNrKl-1689342490742)(E:\教学资料\※笔记※\复习\assets\image-20230711165303373.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YK6WCupP-1689342490742)(E:\教学资料\※笔记※\复习\assets\image-20230711170631237.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYBMFD6n-1689342490742)(E:\教学资料\※笔记※\复习\assets\image-20230711171035954.png)]
择v3.0,点击rollback

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维神经科主任

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值