Jenkins实现CICD之gitlab实现自动化部署和回滚
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Jenkins结合gitlab实现代码下载
1.创建凭证信息
1.1 进入管理凭证页面
如上图所示,进入到管理界面,就可以看到Jenkins的凭据管理界面,如下图所示。
1.2 查看全局凭证
如上图所示进入到全局凭据的界面。
如下图所示,我们可以查看凭据信息。
1.3 添加凭据
如上图所示,填写凭据信息后,点击"Create"就成功创建啦,如下图所示。
2.改动脚本无需拉取代码
[root@ubuntu12.yinzhengjie.com jenkins]# cat deploy-bird-gitlab.sh
#!/bin/bash
# 定义要发布的后端web服务器
HOST_LIST="
10.0.0.13
10.0.0.14
"
# 定义git应用名称
APP=bird
# 定义后端web的nginx存储源代码的路径
APP_PATH=/var/www/html
# 拉取代码到本地
# download () {
# rm -rf ${APP}
# git clone git@www.yinzhengjie.com:dev/bird.git
# }
# 将应用部署到远程仓库服务器
deploy () {
for i in ${HOST_LIST};do
scp -r * $i:${APP_PATH}/
done
}
# 调用脚本
# download
deploy
[root@ubuntu12.yinzhengjie.com jenkins]#
3.创建Jenkins项目
3.1 安装gitlab插件
如上图所示,进入到插件管理界面。
如下图所示,搜索gitlab插件并点击安装按钮。
3.2 创建自由风格的项目
如上下图所示,创建一个自由风格的项目。
3.3 配置构建项目的保留策略
如上图所示,填写项目的描述信息后,配置构建的保留策略即可。
3.4 配置源码管理
如上图所示,配置源码管理,此处我使用了ssh协议,如果使用http协议,请指定凭据哟!
3.5 Jenkins调用脚本
如上图所示,使用Jenkins调用脚本发布应用。
3.6 构建项目
如上图所示,开始构建项目。构建成功后访问webUI,如下图所示。
二.配合Jenkins结合gitlab实现自动化部署和回滚
1.回滚的思路
思路一:
使用"git revert"进行回滚并推送代码到远程仓库。
思路二:
使用软连接的方式指定回滚到具体的版本。
2.使用"git revert"进行回滚并推送代码到远程仓库。
2.1 查看回滚之前的页面
如上图所示,回滚之前页面的标签有'尹正杰'字符串哟。
使用"git log"查看历史如下图所示。
2.2 回滚到到上一个版本
使用"git revert HEAD -m 1"可以进入到交互式界面,输入提交信息后,按住"ctrl + x"就可以保存退出。
如上图所示,使用"git revert"进行回滚后会产生一个新的提交哟。
2.3 推送代码到远程仓库
如上图所示,使用"git push origin master"命令将操作推送到远程仓库。
如下图所示,在远程仓库gitlab是可以看到提交信息的哟。
2.4 调用Jenkins从新构建
构建结果输出如上图所示。
2.5 访问回滚后的页面
如上图所示,不难发现'尹正杰'字样的不存在啦,说明回滚成功啦!
3.使用软连接的方式指定回滚到具体的版本
3.1 web服务器修改nginx的配置文件
(1)创建代码存储目录
mkdir -pv /yinzhengjie/data
(2)修改nginx的配置文件
sed -i 's#/var/www/html#/yinzhengjie/data/html#' /etc/nginx/sites-enabled/default
(3)重新加载nginx服务
nginx -t
nginx -s reload
3.2 编写脚本自动部署和回滚
[root@ubuntu12.yinzhengjie.com jenkins]# ll /yinzhengjie/script/jenkins/deploy-bird-gitlab-rollback.sh
-rw-r--r-- 1 root root 1692 Feb 19 03:43 /yinzhengjie/script/jenkins/deploy-bird-gitlab-rollback.sh
[root@ubuntu12.yinzhengjie.com jenkins]#
[root@ubuntu12.yinzhengjie.com jenkins]# chmod +x /yinzhengjie/script/jenkins/deploy-bird-gitlab-rollback.sh
[root@ubuntu12.yinzhengjie.com jenkins]#
[root@ubuntu12.yinzhengjie.com jenkins]# cat deploy-bird-gitlab-rollback.sh
#!/bin/bash
# 指定要发布应用的服务器
HOST_LIST="
10.0.0.13
10.0.0.14
"
# 指定应用的名称
APP=bird
# 指定应用源代码存储目录
APP_PATH=/yinzhengjie/data/html
# 指定数据路径
DATA_PATH=/opt
# 定义时间格式
DATE=`date +%F_%H-%M-%S`
deploy () {
for i in ${HOST_LIST};do
# 先删除软链接文件,再创建推送代码到web服务器的源代码路径
ssh $i "rm -f ${APP_PATH} && mkdir -pv ${DATA_PATH}/${APP}-${DATE}"
# 将数据拷贝到web站点的源代码路径
scp -r * $i:${DATA_PATH}/${APP}-${DATE}
# 创建软连接,将拷贝到web站点的源代码路径链接到nginx的代码根目录。
ssh $i "ln -sv ${DATA_PATH}/${APP}-${DATE} ${APP_PATH}"
done
}
rollback() {
for i in ${HOST_LIST};do
# 使用readlink命令读取软连接指向的真实路径
CURRENT_VERISION=$(ssh $i "readlink ${APP_PATH}")
# 通过basename获取最终存放代码的目录名称表示当前版本
CURRENT_VERISION=$(basename ${CURRENT_VERISION})
echo ${CURRENT_VERISION}
# "ls -1"表示竖着显式,使用grep获取当前版本的前一个版本,然后使用head查看第一个版本的目录名称作为前一个版本。
PRE_VERSION=$(ssh $i "ls -1 ${DATA_PATH} | grep -B1 ${CURRENT_VERISION}|head -n1 ")
echo $PRE_VERSION
# 删除符号链接,并重新创建符号链接,将前一个版本链接到最新的符号链接哟~
ssh $i "rm -f ${APP_PATH} && ln -sv ${DATA_PATH}/${PRE_VERSION} ${APP_PATH}"
done
}
# 根据用户传参,来判断调用哪个函数
case $1 in
deploy)
deploy
;;
rollback)
rollback
;;
*)
exit
;;
esac
[root@ubuntu12.yinzhengjie.com jenkins]#
3.3 配置Jenkins调用脚本实现部署
3.3.1 创建Jenkins项目
如上图所示,我们可以基于现有的项目直接新建即可。
3.3.2 Jenkins首次进行服务部署
如上图所示,使用Jenkins调用咱们的自定义脚本并传递'deploy'参数进行部署。
3.3.3 修改gitlab代码
如上图所示,使用root用户提交代码并合并。便于再次部署服务。
3.3.4 Jenkins再次进行服务部署
如上图所示,再一次部署成功了,说明咱们的脚本是没有问题的。
3.3.5 Jenkins回滚到上一次版本
如上图所示,将位置变量参数更改为"rollback"就可以成功回滚了哟!
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18596460,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。