shell 上线脚本(jenkins部署)
jenkins 部署脚本依赖 jenkins 插件结合 gitlab+maven+构建后通知,比较之前写的脚本,更能完善发布流程,测试环境发布如下。
登录jenkins后,使用测试账号登录,选择自己需要构建的项目——》点击进入后——》Build with Parameters ——》根据测试需求,选择分支打包
构建过程中自动构建,判断,有问题自动暂停
最后通知构建成功,并发送邮件
脚本如下:
# 192.168.10.91 上面编译
cd /root/.jenkins/workspace/test自营aumtest_platform-admin2 && /usr/local/apache-maven/bin/mvn clean package -Dmaxmemory=500M -Dmaven.test.skip=true -U
# 判断是否有编译问题
NUM2=`echo $?`
if [[ $NUM2 != 0 ]];then
echo -e "\033[41;37m 第二步:$APP_NAME编译 检查有问题请查看 \033[0m"
exit
else
echo -e "\033[32m $APP_NAME 编译 没有问题 \033[0m"
fi
# 远程调用192.168.10.187
ssh root@192.168.10.187 "sh /home/work/script/devops/aumtest_platform-admin.sh golive"
# 远程调用192.168.10.187 脚本
[root@jobadmin devops]# cat aumtest_platform-admin.sh
#!/bin/sh
#########
# 积存金上线脚本
# by xuebao 20180709
#########
APP_NAME="platform-admin.jar"
TIME=$(date +%F_%H_%M_%S)
APP_LIST="platform-admin"
# 启动命令
start() {
cd /usr/local/apps/$APP_LIST/ && sh start.sh
}
# 停止命令
stop(){
cd /usr/local/apps/$APP_LIST/ && sh stop.sh
sleep 3
APP_PID=`ps -ef|grep java|grep $APP_NAME|awk '{print $2}'`
SERVER_ID=`ps -ef|grep java|grep $APP_NAME|wc -l`
SERVER_STATUS="ps -ef|grep java|grep $APP_NAME"
if [[ $SERVER_ID == 1 ]];then
echo -e "\033[41;37m 第三步:$APP_NAME 应用停止失败,使用kill -9 $PID \033[0m"
kill -9 $APP_PID
ps -ef|grep java|grep $APP_NAME
exit
else
echo -e "\033[32m 第三步:$APP_NAME 应用已停止成功 \033[0m"
fi
}
# 上线模块
golive() {
echo -e "\033[32m 第四步:$APP_NAME3 开始部署\033[0m"
ssh root@192.168.10.91 "sh -x /home/work/script/devops/zy_aumtest-platform-admin.sh"
}
# 状态模块
status() {
SERVER_ID2=`ps -ef|grep java|grep $APP_NAME|wc -l`
APP_NAME4="platform-admin.jar"
if [[ $SERVER_ID2 == 1 ]];then
echo -e "\033[32m 第五步:$APP_NAME4 部署成功: $APP_NAME4 服务START...... \033[0m"
else
echo -e "\033[41;37m 第五步:$APP_NAME4 部署失败: $APP_NAME4 服务STOP...... \033[0m"
fi
ls -lrth /usr/local/apps/platform-admin/target/
ps -ef|grep java|grep $APP_NAME4
}
# 回滚脚本
rollback() {
cd /home/jcjuser/apps/goldadmin/target/
mv $INPUT2 goldadmin-1.0-SNAPSHOT.jar
ls -lrth goldadmin-1.0-SNAPSHOT.jar*
}
# 查询备份列表
list(){
cd /home/jcjuser/apps/goldadmin/target/
ls -lrth goldadmin-1.0-SNAPSHOT.jar_*
}
# 判断模块
decide() {
SERVER_ID3=`ps -ef|grep java|grep $APP_NAME|wc -l`
APP_NAME5="platform-admin.jar"
if [[ $SERVER_ID3 == 1 ]];then
echo -e "\033[32m $APP_NAME4 服务START 中可以进行下一步部署..... \033[0m"
else
echo -e "\033[41;37m $APP_NAME4 应用状态停止中,下面会报错ERROR: The goldadmin does not started!,请忽略...... \033[0m"
fi
}
main() {
INPUT1=$1
INPUT2=$2
case $INPUT1 in
golive)
decide
stop
golive
start
status
;;
rollback)
stop
rollback $INPUT2
start
status
;;
list)
list
;;
start)
start
status
;;
status)
status
;;
stop)
stop
;;
*)
echo -e "\033[41;37m sh /home/jcjuser/shell/jcjwap_ops.sh {golive|rollback|list 提示:如果回滚前请查看列表} \033[0m"
exit
;;
esac
}
main $1 $2