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"就可以成功回滚了哟!

posted @ 2024-12-10 07:00  尹正杰  阅读(544)  评论(0)    收藏  举报