【CICD】java程序自动编译发布项目脚本
jenkins shell
#!/bin/bash
#tomcat服务器上发布java程序
#定义发布环境变量
war_bak="/data/tomcat/test/bak"
tomcat_deploy="/data/tomcat-${deploy}/webapps"
#WAR_PATH="${WORKSPACE}/${MODULE_NAME}/target/*.war"
WAR_PATH="${WORKSPACE}/target/*.war"
#发布主机IP,这里使用一台,正式、测试、回滚使用不同路径区分
test_host="10.42.14.178"
stag_host=""
port="8083"
#生成回溯日志
mkdir -p /var/jenkins_home/cicd-log
echo "构建环境:${deploy} 项目名称:${JOB_NAME} 构建时间:`date +%F` 本次上线版本:${GIT_COMMIT}" >>/var/jenkins_home/cicd-log/${JOB_NAME}.log
#部署状态与回退
#判断git是否为空,如果是为空进行提示
if [ "${git}" = "" ];then
echo "请输入git commit md5号"
exit 1
else
## 判断发布 or 回滚,如果jenkins对话框选择Deploy就执行部署
if [ "${Status}" = "Deploy" ];then
### 判断是否为测试环境
if [ "${deploy}" = "test" ];then
### 构建主机
for i in ${test_host}
do
ssh ${i} "mkdir -p ${war_bak}/${JOB_NAME}/${git}"
scp ${WAR_PATH} ${i}:${war_bak}/${JOB_NAME}/${git}/ROOT.war
ssh ${i} rm -rf ${tomcat_deploy}/*
ssh ${i} cp ${war_bak}/${JOB_NAME}/${git}/ROOT.war ${tomcat_deploy}
ssh ${i} systemctl restart tomcat-${deploy}.service
### 判断tomcat是否正常
for http in `seq 1 5`
do
tomcat_status=`curl -I ${i}:${port} -s|awk -F "[ ]" '{print $2}' |sed -n '1p'`
if [[ "$tomcat_status" -ne 200 ]] || [[ "$tomcat_status" = "" ]];then
echo -e "\033[5;34m 请稍等,服务启动中........ \033[0m"
sleep 15
else
echo -e "\033[5;34m 构建 ${i}环境发布正常,返回值[${tomcat_status}] \033[0m"
break
fi
done
if [[ "${tomcat_status}" -ne 200 ]] || [[ "${tomcat_status}" = "" ]];then
if [[ "${tomcat_status}" = "" ]];then
echo -e "\033[5;34m 构建 ${i}服务启动异常 \033[0m"
exit 1
fi
echo -e "\033[5;34m 构建 ${i}环境发布异常,返回值[${tomcat_status}] \033[0m"
fi
done
echo -e "\033[5;34m 本次构建${test_host}主机,本次环境 ${deploy} \033[0m"
## 判断为预发布环境,如果jenkins对话框选择stag就执行预发布主机部署,这里没有配置默认不执行
elif [ "${deploy}" = "stag" ];then
for i in "${stag_host}"
do
ssh ${i} mkdir -p ${war_bak}/${JOB_NAME}/${git}
scp ${WAR_PATH} ${i}:${war_bak}/${JOB_NAME}/${git}/ROOT.war
ssh ${i} rm -rf ${tomcat_deploy}/*
ssh ${i} cp ${war_bak}/${JOB_NAME}/${git}/ROOT.war ${tomcat_deploy}
ssh ${i} /etc/init.d/abcdocker-test restart
### 判断tomcat是否正常
for http in `seq 1 5`
do
tomcat_status=`curl -I ${i}:${port} -s|awk -F "[ ]" '{print $2}' |sed -n '1p'`
if [[ "$tomcat_status" -ne 200 ]] || [[ "$tomcat_status" = "" ]];then
echo -e "\033[5;34m 请稍等,服务启动中........ \033[0m"
sleep 10
else
echo -e "\033[5;34m 构建 ${i}环境发布正常,返回值[${tomcat_status}] \033[0m"
break
fi
done
if [[ "${tomcat_status}" -ne 200 ]] || [[ "${tomcat_status}" = "" ]];then
if [[ "${tomcat_status}" = "" ]];then
echo -e "\033[5;34m 构建 ${i}服务启动异常 \033[0m"
exit 1
fi
echo -e "\033[5;34m 构建 ${i}环境发布异常,返回值[${tomcat_status}] \033[0m"
fi
done
echo -e "\033[5;34m 本次构建${test_host}主机,本次环境 ${deploy} \033[0m"
fi
### 回滚操作 使用RollBack填写commit md5 拉取对应时间版本的代码再次编译上线 完成回退
elif [[ "${Status}" = "RollBack" ]];then
### 判断回滚环境及主机
if [ "${deploy}" = "test" ];then
for i in ${test_host}
do
ssh ${i} "[ -d ${war_bak}/${JOB_NAME}/${git} ]"
if [ $? -ne '0' ];then
echo -e "\033[5;34m git commit 回滚目录不存在,环境${deploy} 错误主机${i} \033[0m"
exit 3
else
echo -e "\033[5;34m 准备回滚操作 本次回滚环境${deploy} 回滚主机${i} \033[0m"
sleep 3
fi
ssh ${i} "mkdir -p ${war_bak}/${JOB_NAME}/${git}_${Status}_rollback/"
ssh ${i} "cp -r ${tomcat_deploy}/* ${war_bak}/${JOB_NAME}/${git}_${Status}_rollback/"
ssh ${i} "rm -rf ${tomcat_deploy}/*"
ssh ${i} "cp -r ${war_bak}/${JOB_NAME}/${git}/*.war ${tomcat_deploy}/"
ssh ${i} /etc/init.d/abcdocker-test restart
### 判断tomcat是否正常
for http in `seq 1 5`
do
tomcat_status=`curl -I ${i}:${port} -s|awk -F "[ ]" '{print $2}' |sed -n '1p'`
if [[ "$tomcat_status" -ne 200 ]] || [[ "$tomcat_status" = "" ]];then
echo -e "\033[5;34m 请稍等,服务启动中........ \033[0m"
sleep 15
else
echo -e "\033[5;34m 构建 ${i}环境发布正常,返回值[${tomcat_status}] \033[0m"
break
fi
done
if [[ "${tomcat_status}" -ne 200 ]] || [[ "${tomcat_status}" = "" ]];then
if [[ "${tomcat_status}" = "" ]];then
echo -e "\033[5;34m 构建 ${i}服务启动异常 \033[0m"
exit 1
fi
echo -e "\033[5;34m 构建 ${i}环境发布异常,返回值[${tomcat_status}] \033[0m"
fi
done
elif [ "${deploy}" = "stag" ];then
echo "123"
### 判断测试环境fi结束
fi
fi
#### fi是判断是否有git地址的结束
fi
转载请注明-MrZ-个人博客
THE END
0
二维码
海报
【CICD】java程序自动编译发布项目脚本
jenkins shell
#!/bin/bash
#tomcat服务器上发布java程序
#定义发布环境变量
war_bak="/data/tomcat/test/bak"
tomcat_deploy="/data/tomcat-${deploy}/webapps"
#WAR_PATH="${WORKSPACE……
共有 0 条评论