3.2:Jenkins 集成FreeStyle 实践 (自动版本发布、tags发布、版本回滚)

1.能不能全自动,开发提交了代码, 然后自动的发布;  [测试环境]  --> 没有问题 --> tag标记

	1.jenkins的通知地址:
		http://jenkins.oldxu.com:8080/project/freestyle-web-monitor-deploy
	2.jenkins生成token令牌
		0438799ca21015045d3a769bc4d19f9b

	3.登录gitlab 
		1.管理中心-->设置-->网络设置-->外发请求-->允许钩子和服务访问本地网络  ( 勾选上 )
		2.在gitlab节点服务器上配置Jenkins的DNS解析
	4.找到对应的项目
		设置-->集成-->
			链接-->  ( jenkins的通知地址 )
			令牌-->  ( jenkins针对项目生成的toiken令牌 )


2.能不能基于某个指定tag进行发布;  每次都是发布, 基于tag方式发布  [ 生产环境  ]


3.出现故障, 如何回滚;  代码:
	
	1.登录目标集群
	2.摘掉节点;	---> nginx不支持; haproxy;
	2.删除软链接;
	3.重建软链接;
	4.重启,php;
	5.加入节点;	---> nginx不支持; haproxy

本章课程内容大纲
1.Jenkins如何集成gitlab
  1.Jenkins为什么要集成Gitlab
  2.Jenkins如何集成Gitlab
  3.Jenkins与Gitlab集成思路
  4.Jenkins与Gitlab集成实践
2.Jenkins实现项目自动化发布
3.Jenkins实现项目tag方式发布
4.Jenkins实现项目tag发布与回退
5.Jenkins解决项目能重复发布问题

1.Jenkins实现Gitlab集成

1.Jenkins为什么要集成Gitlab
因为我们需要依托jenkins将gitlab上的项目获取至本地,为后续网站的的代码发布工作做好准备。

2.Jenkins如何集成Gitlab
由于jenkins只是一个调度平台,所有需要安装与gitlab相关的插件即可完成集成。

3.Jenkins与Gitlab集成思路
1.开发提交代码至Gitlab
2.jenkins安装gitlab所需插件
3.jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。

4.Jenkins与Gitlab集成实践
1.切换至gitlab服务,然后导入项目代码。( PS: 当然也可以自己创建项目。)监控平台代码url


2.Jenkins安装与gitlab关联的插件

插件名称 插件作用
Credentials Plugin 允许在Jenkins中存储认证的凭据
Git Client Plugin 允许Jenkins使用Git
Git Plugin 允许Jenkins集成Git
Gitlab Plugin 允许Gitlab触发Jenkins构建并在Gitlab中显示
GitLab Hook 允许 gitlab 自动触发 jenkins 构建项目
Gitlab Authentication plugin gitlab 身份验证插件

3.jenkins配置freestyle,配置gitlab仓库代码地址

1)创建freestyle项目

2)在jenkins中填写gitlab项目地址。
PS: Jenkins服务器如果无法下载gitlab项目,需要点击添加–>新增凭据。


3)jenkins需要访问gitlab项目,则需要与gitlab建立信任。首先登陆Jenkins服务器,然后通过ssh-keygen生成一对秘钥。
-c
4)然后将Jenkins服务器生成的公钥添加上gitlab服务器。

5)然后回到jenkins添加秘钥处,将root用户生成的私钥添加至Jenkins服务器上。至此就完成了公钥加密,私钥解密。此时jenkins就能正常访问gitlab项目。

6)选择对应的凭据,再次检查是否存在报错提示。如果没有点击保存即可。

7)最后点击构建,然后查看构建的输出信息是否有错误提示。


8)构建成功后,代码会被下载至Jenkins本地/var/log/jenkins/workspace目录下。

2.Jenkins实现自动发布

1.自动发布项目架构图

2.自动发布项目实现思路
1.手动搭建nginx集群架构
2.开发提交代码至gitlab、手动拉取代码,并推送至web服务器组
3.将手动操作编写至Shell脚本,由Jenkins调取,并推送至web服务器组

3.编写上线脚本,将代码推送至Web服务器组。
1.配置jenkins构建发布脚本

2.发布脚本如下

[root@jenkins ~]# cat /scripts/html_deploy.sh
#!/usr/bin/bash
​
Date=$(date +%F-%H-%M)
Pkg_Name=web_monitor_${Date}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"
​
tar_code () {
  #1.进入到代码的目录下($WORKSPACE)
  #2.打包存放至本地jenkins服务器的/opt
  cd $WORKSPACE && \
  tar czf ${Web_Dir}/${Pkg_Name}.tar.gz ./*
}
​
​
scp_code() {
  #3.使用scp将代码包分发至web集群
  #4.通过ssh命令登录web集群主机,执行目录创建,解压,软件连接等操作
  for i in ${Web_Server}
  do
    scp -rp ${Web_Dir}/${Pkg_Name}.tar.gz root@${i}:${Web_Dir}
    ssh root@${i} "cd ${Web_Dir} && \
                       mkdir ${Pkg_Name} -p && \
                       tar xf ${Pkg_Name}.tar.gz -C ${Pkg_Name} && \
                       rm -f ${Web_Dir}/${Pkg_Name}.tar.gz && \
                       rm -f /code/web && \
                       ln -s ${Web_Dir}/${Pkg_Name} /code/web"
  done
}
​
deploy (){
    tar_code
    scp_code
}
​
    deploy

3.尝试修改一下代码的内容,然后提交至gitlab服务器。最后点击Jenkins构建操作,检查网站是否会更新成功。

3.Jenkins实现版本发布

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

2.实现tag版本上线方式思路
1.开发如果需要发布新版本,必须将当前的版本打上一个标签。
2.jenkins需要让其脚本支持传参,比如用户传递v1.1则拉取项目的v1.1标签

3.实战Jenkins部署tag版本
1.首先安装Git Parameter插件,然后配置Jenkins参数化构建,让用户在构建时选择对应的tag版本。

2.配置Jenkins源码管理

3.修改Jenkins发布脚本,让其脚本支持用户传入的参数。

4.jenkins发布脚本,整体文件如下。

[root@jenkins ~]# cat /scripts/html_deploy_tag.sh
#!/usr/bin/bash
​
Date=$(date +%F-%H-%M)
Pkg_Name=web_monitor_${Date}_${git_version}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"
​
tar_code () {
  #1.进入到代码的目录下($WORKSPACE)
  #2.打包存放至本地jenkins服务器的/opt
  cd $WORKSPACE && \
  tar czf ${Web_Dir}/${Pkg_Name}.tar.gz ./*
}
​
​
scp_code() {
  #3.使用scp将代码包分发至web集群
  #4.通过ssh命令登录web集群主机,执行目录创建,解压,软件连接等操作
  for i in ${Web_Server}
  do
    scp -rp ${Web_Dir}/${Pkg_Name}.tar.gz root@${i}:${Web_Dir}
    ssh root@${i} "cd ${Web_Dir} && \
                       mkdir ${Pkg_Name} -p && \
                       tar xf ${Pkg_Name}.tar.gz -C ${Pkg_Name} && \
                       rm -f /code/web && \
                       ln -s ${Web_Dir}/${Pkg_Name} /code/web"
  done
}
​
deploy (){
    tar_code
    scp_code
}
​
    deploy

3.发现此前部署的v1.2有很多Bug。现在想回退至v1.1版本,找到回退的job,填写回退的版本号即可。


4.登陆web服务器,查看代码是否更新成功。
在这里插入图片描述

5.通过浏览器访问项目网站,检查是否更新为修改后的版本
在这里插入图片描述

4.Jenkins实现版本回滚

1.在Jenkins添加一个freestyle的job,配置配置文本的参数化构建,最后编写脚本实现回滚功能。

[root@jenkins scripts]# cat html_rollback_tag.sh
[root@jenkins scripts]# cat /scripts/html_rollback.sh
#!/usr/bin/bash
​
# 回退脚本
# 1.登陆目标集群服务
# 2.删除软连接、重建软连接
​
Date=$(date +%F-%H-%M)
Web_Name=web-monitor-${Date}
Web_Dir=/opt
Web_Server="172.16.1.7 172.16.1.8"
​
for host  in ${Web_Server}
do
    ssh root@${host} "if [ -d ${Web_Dir}/web-monitor-*_${git_version} ];then
                        rm -f /web
                        ln -s ${Web_Dir}/web-monitor-*_${git_version} /web
                        echo "web-monitor 项目回退至 ${git_version} 版本成功"
                    else
                        echo "版本填写错误,退出"
                        exit 1
                    fi"
done

5.Jenkins重复构建项目

前面我们已经实现代码按照版本的方式发布与回退了,但是还有一个问题,如果我此前部署过v1.1,如果我不小心在部署了一次v1.1还是会提示部署成功。那能否实现,部署过的版本不允许再次重复部署

测试重复构建同一个版本会出现什么情况呢?

猜你喜欢

转载自blog.csdn.net/xiaoleinb/article/details/112589415
今日推荐