目录
一、事件起因
新需求是在APP列表中新添两个字段。在本地开完完成,写入、查询都能实现达到要求。但是部署到测试环境时,经测试新功能没实现。
二、排查过程
1)查看git上的diamante、Jenkins编译的代码,发现代码都已经更新。
2)仔细看Jenkins部署的日志,发现问题:
于是去查看相应的脚本,
Jenkins服务器到Tomcat服务器的ssh免密登录失败,导致Jenkins新打的war复制不过去。
3)在Tomcat服务器长查看对应目录的war,发现war的更新时间竟然是好几天前的了,果然没复制过来。
三、解决经过
1)尝试一、刚开始未定位好问题,就把Jenkins的工作空间清理:
但是由于对这个目录与服务器上的对应目录不清楚,导致再部署时找不到deploy-test.sh脚本。后来从别的项目拷贝过来处理完成。
2)尝试二、针对分析出的问题,知道是免密登陆的问题
配置Jenkins到Tomcat服务器的免密登录:
A免密登录B:
A:ssh-keygen -t rsa
A:ssh-copy-id -i ~/.ssh/id_rsa.pub bdp@xx.xx.xx.xx
#以上完成后,B服务器上/home/bdp/.ssh目录下多一个authorized_keys文件
#注意文件权限
B chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
最后,问题解决。
四、总结
遇到报错,一定要仔细看日志,仔细!从日志着手。
附脚本
1)deploy-test.sh
WORK_DIR=`dirname $0`
WORK_DIR=`cd "$bin"; pwd`
PARAM=$*
ENV=${PARAM#*-}
IP=${PARAM%-*}
USER=bdp
TEMP_PATH=/home/$USER
DEPLOY_PATH=/opt/apps/apache-tomcat-8.5.33
SERVERS=$PARAM # supposed to be like "10.15.27.172"
for i in $SERVERS;
do
echo "deploy BDP CASH to server:$i";
scp $WORK_DIR/target/sea.war $USER@$i:$TEMP_PATH
ssh -t $USER@$i "source "$TEMP_PATH"/.bash_profile;sh -x "$DEPLOY_PATH"/online.sh"
echo 'BDP CASH 上线完成'$IP' PATH:'$DEPLOY_PATH
done
2)online.sh
#!/bin/sh
USER=bdp
TEMP=/home/$USER
nowt=`date +%Y%m%d%H%M%S`
source /home/$USER/.bash_profile
TOMCAT_HOME="/opt/apps/apache-tomcat-8.5.34" #tomcat目录路径
echo "停止tomcat服务"
cd "$TOMCAT_HOME"
sh -x stop.sh
echo "备份原有的cash.war包" #webapps是网站目录
mv webapps/sea.war warback/sea.war.$nowt
echo "删除webapps目录下的webapps目录和cash.war" #webapps是网站目录
rm -rf "$TOMCAT_HOME"/webapps/*
echo "复制cash.war到webapps目录下"
cp $TEMP/sea.war "$TOMCAT_HOME"/webapps
echo "启动tomcat服务"
sh bin/startup.sh
3)stop.sh
set -m
ps aux | grep /opt/apps/apache-tomcat-8.5.33/bin | grep -v grep | awk '{print $2}' | xargs -i kill -9 {}