1.结合jenkins参数化,把test,uat,prod三个环境的部署集合到一个jenkins job 里
2.自动判断需要部署的分支–直接用webhook(钩子)推送过来的参数获取判断(但是只有自动推送的时候能拿到,并不会存为Jenkins的环境变量可以反复使用)
#!/bin/sh
PROJECT_NAME="cen" ##jenkins参数化的选项
ENV="UAT" ##jenkins参数化的选项
if [ "$PROJECT_NAME" = "cen" ]&&[ "$ENV" = "UAT" ];then ##if 语句中必须带空格
HOST_LIST="182.110.17.4 182.110.17.3"
echo 'deploy UAT'
elif
[ "$PROJECT_NAME" = "wor" ]&&[ "ENV" = "UAT" ];then
HOST_LIST="182.110.17.2"
fi
for host in $HOST_LIST; do ##循环部署
echo "===========deploy to $host============"
done
前端vue部署,为了节约时间先npm run,如果run失败再
npm build npm run
cd /root/.jenkins/workspace/SaleFeTest
&& npm run test || ! npm build || npm run test
&& npm run test
rsync -avz -e "ssh -p22" --delete /root/.jenkins/workspace/SaleFeTest/dist/ 0.0.0.0:/home/wwwroot/test.sale/
建立项目IP字典文件,部署脚本进一步封装抽离
a.新建字典TXT文件
内容
PROJECT_NAME1=1.0.1.0
PROJECT_NAME2=2.0.1.0
b.新建sh文件执行命令集,获取项目对应的IP
ip=cat /opt/DingUserList.txt | grep "${PROJECTNAME}=" | awk -F"=" '{print $2}'
C.Jenkins执行shell命令传参以及执行sh文件即可,从而实现了部署脚本的进一步抽离
3.简单回滚代码
HOST_LIST="111.111.11 22.22.22"
if ["$RollBackVersion" == ""]
then
for host in $HOST_LIST; do
echo "===========deploy to $host============"
done
else
echo "正在强制回退本地服务器代码版本"
for host in $HOST_LIST; do
ssh $host "git reset --hard $RollBackVersion"
done
fi
4.jenkins优化了一下第一次部署,只需要告知仓库地址和部署目录(如果部署目录不存在。git先克隆库)
repo_dir='/home/wwwroot/test-api'
ssh 11.11.11.12 "
if [ ! -d $repo_dir/.git ]
then
echo $repo_dir is not a git repository, cloning...
git clone $GIT_URL $repo_dir
fi"
后续可以进一步考虑:
(1)过滤掉静态页面的更新,不用重启tomcat
(2)抽取脚本中的通用的方法
(3)根据公司的业务参数的进一步抽离
参考大佬文章:
https://www.cnblogs.com/linjiqin/p/7779341.html
https://www.cnblogs.com/nmap/p/6784121.html