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

环境准备
#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 git@172.18.6.216: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端配置
点击新建任务,输入任务名称,选择创建一个自由风格的项目,点击确认
安装git parameper插件



编写自动化部署与回滚脚本
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 #添加执行权限

保存后执行如下步骤:

选择部署v1.2版本:

此时查看web服务器:


部署成功,再测试部署v1.3和v1.5后查看项目目录,发现所有的版本项目已经被复制并解压到设定目录:

测试回滚版本:
现在是v1.5版本

测试再回滚到v1.2


测试成功

当部署已部署过的项目时,则提示部署重复:

本文详细介绍了如何使用Jenkins进行自动化部署的过程,包括配置GitLab服务、实现代码自动拉取和部署到nginx服务器,以及如何编写自动化部署和回滚脚本。
1117

被折叠的 条评论
为什么被折叠?



