Jenkins实现集群代码部署与回滚

实验环境与规划
 提前配置好gitlab服务,能够正确提交和拉取代码,Jenkins根据项目的标签版本选择性的拉取项目代码并通过执行脚本自动部署到后端的web服务器上,这里的web服务使用的是nginx,可以实现热部署,不需要暂停服务。
Jenkins实现集群代码部署与回滚_第1张图片
环境准备

#web服务器上安装nginx
#修改配置文件,自定义静态页面存放路径
vim /etc/nginx/nginx.conf
server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        #root         /usr/share/nginx/html;
        root         /data/web/html/;
        …………
systemctl restart nginx

#gitlab服务器要和Jenkins服务密钥认证,gitlab上存放公钥,Jenkins上存放私钥,并且Jenkins也要和web端密钥认证
#gitlab端创建项目名称和程序端提交代码到gitlab服务器
mkdir /data/ngxweb -p && cd /data/ngxweb      #创建项目目录并初始化
git init          
git remote add origin [email protected]:devops/ngxweb.git

#分别创建三个标签项目,并push到gitlab服务
echo "jenkins deploy nginx web service-devops-v1.2" > index.html
git add .
git commit -m "v1.2"
git tag -a "v1.2" -m "v1.2"
git push origin v1.2

echo "jenkins deploy nginx web service-devops-v1.3" > index.html
git add .
git commit -m "v1.3"
git tag -a "v1.3" -m "v1.3"
git push origin v1.3

echo "jenkins deploy nginx web service-devops-v1.5" > index.html
git add .
git commit -m "v1.5"
git tag -a "v1.5" -m "v1.5"
git push origin v1.5
#Jenkins服务端配置
#查看gitlab服务项目目录

Jenkins实现集群代码部署与回滚_第2张图片
Jenkins端配置
点击新建任务,输入任务名称,选择创建一个自由风格的项目,点击确认
安装git parameper插件
Jenkins实现集群代码部署与回滚_第3张图片
Jenkins实现集群代码部署与回滚_第4张图片
Jenkins实现集群代码部署与回滚_第5张图片
编写自动化部署与回滚脚本

vim deploy_nginx.sh
#!/bin/bash
WEB_SERVER="
192.168.131.58
192.168.131.78
"
DATE=$(date +%F:%H-%M-%S)
NAME=${DATE}-${git_version}         #日期加版本号

get_copy(){       #拉取代码并打包
        cd ${WORKSPACE}                #项目的绝对路径变量,即/var/lib/jenkins/workspace/devopslab
        tar czvf /opt/ngxweb-${NAME}.tar.gz ./*
}

scp_ngxweb(){        #远程复制并部署项目
for IP in $WEB_SERVER
do
	scp /opt/ngxweb-${NAME}.tar.gz root@${IP}:/opt/
	ssh root@${IP} "mkdir /data/web/html-${NAME} -p && \
	tar xf /opt/ngxweb-${NAME}.tar.gz -C /data/web/html-${NAME}/ && \
	rm -rf /data/web/html && ln -s /data/web/html-${NAME} /data/web/html && \
	/usr/sbin/nginx -s reload"
done
}
#版本回滚函数
back_ngxweb(){
for IP in $WEB_SERVER
do      back_version=$(ssh root@${IP} "find /data/web/ -maxdepth 1 | grep "html.*-${git_version}"")  #取到上需要回滚的版本项目目录
        ssh root@${IP} "rm -rf /data/web/html && ln -s ${back_version} /data/web/html"   #把取到的版本目录软连接到html
done
}
#版本升级部署函数
deploy_ngxweb(){
	get_copy
	scp_ngxweb
}
#通过if判断,如果选择是deploy,即部署项目,在判断此项目是否已经部署过
if [ $deploy_env == "deploy" ];then        
	if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
		echo "您已经部署过 ${git_version} 版本的项目了"  #部署过则返回此句,退出
		exit 1
	else
		deploy_ngxweb
	fi
elif [ $deploy_env == "rollback" ];then
	back_ngxweb    #如果选择回滚则执行回滚函数
fi

chmod +x /data/deploy_nginx.sh       #添加执行权限

Jenkins实现集群代码部署与回滚_第6张图片
保存后执行如下步骤:
Jenkins实现集群代码部署与回滚_第7张图片
选择部署v1.2版本:
Jenkins实现集群代码部署与回滚_第8张图片
此时查看web服务器:
Jenkins实现集群代码部署与回滚_第9张图片
Jenkins实现集群代码部署与回滚_第10张图片
部署成功,再测试部署v1.3和v1.5后查看项目目录,发现所有的版本项目已经被复制并解压到设定目录:
在这里插入图片描述
测试回滚版本:
现在是v1.5版本
Jenkins实现集群代码部署与回滚_第11张图片
测试再回滚到v1.2
Jenkins实现集群代码部署与回滚_第12张图片

Jenkins实现集群代码部署与回滚_第13张图片
测试成功
Jenkins实现集群代码部署与回滚_第14张图片
当部署已部署过的项目时,则提示部署重复:
Jenkins实现集群代码部署与回滚_第15张图片

你可能感兴趣的:(jenkins)