Jenkins 自动部署 SpringBoot项目,是部署到远程服务器,打war包传到服务器成功,启动war包失败
第16行,17行都执行了的,服务器路径下能看到Jenkins刚打包传过去的war包,可能第19行自动启动war包的命令失败了,就是不能自动启动war包
Jenkins是开源的自动化部署平台,部署在A服务器
我们的springboot项目部署在B服务器,截图是项目最外层加的 Jenkinfile配置文件,Jenkins上点部署,会拉取git代码仓代码,读取截图中的配置文件,向B服务器传war包,并启动。
问题现象:现在打war包发布服务器成功,服务器能看到最新的war包,但自动启动war包失败,需要手动去服务器打开war包所在路径,执行:sh /opt/oa/run.sh restart 启动,手动启动成功。
服务器根路执行第19行,日志输出到文件后显示的是:
nohup: ignoring input
在该目录{/dev}没有找到可运行jar或war文件
服务器 run.sh脚本
#!/bin/bash
APPNAME=''
for item in `ls`
do
fileName=$item
if [ ! -d $fileName ]
then
if [ ${fileName##*.} = jar ]
then
APPNAME=$fileName
break
fi
if [ ${fileName##*.} = war ]
then
APPNAME=$fileName
break
fi
fi
done
if [ -z ${APPNAME} ]
then
pwd=`pwd`
echo "在该目录{$pwd}没有找到可运行jar或war文件"
exit 1
fi
APP_NAME=$APPNAME
#根据实际情况修改参数
#JVM="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128M -XX:MaxNewSize=128m -XX:MaxPermSize=25zh6m -Xss256k -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -Xloggc:./logs/gc.log"
JVM="-server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128M -XX:MaxNewSize=128m -XX:MaxPermSize=25zh6m -Xss256k -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -Xloggc:./logs/gc.log"
#APPFILE_PATH="-Dspring.config.location=/usr/local/config/application.properties"
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log|backup]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1
#后台启动jar包,且控制环境变量,根据实际情况修改吧。
nohup java $JVM -jar $APP_NAME > nohup.log 2>&1 &
log
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "running:${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#日志
log(){
# 输出实时日志
tail -n 100 -f nohup.log
}
#备份
backup(){
echo 'backup file ->'$APP_NAME $APP_NAME'.bak'
#备份当前jar包
cp -r $APP_NAME $APP_NAME'.bak'
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"log")
log
;;
"backup")
backup
;;
*)
usage
;;
esac
部分脚本:
stage('Deploy To Dev') {
when {
expression { params.deploy_env == 'dev环境' }
}
steps {
script {
def remote = [:]
remote.name = 'dev-jeesite'
remote.host = '10.1.3.9'
withCredentials([usernamePassword(credentialsId: '10.1.1.9-node', passwordVariable: 'password', usernameVariable: 'username')]) {
remote.user = "${username}"
remote.password = "${password}"
}
remote.allowAnyHosts = true
sshCommand remote: remote, command: "cp -f /opt/oa/web.war /opt/oa/web.war.bak"
sshPut remote: remote, from: 'web/target/web.war', into: '/opt/oa'
sh "echo -----------开始启动-----------"
sshCommand remote: remote, command: "source /etc/profile" //同步远程服务器的环境变量
sshCommand remote: remote, command: "nohup sh /opt/oa/run.sh restart > /dev/null 2>&1 &"
}
sh "curl -X POST -d 'text=site 测试环境打包部署任务执行成功,执行详情:http://10.1.1.1:8080/job/ite/job/dev/' t"
}
}
排查过程,将19行的重定向,改成重定向一个文件中,应该还是环境变量的问题
将18与19行的shell 通过&&合成一个试试
确保已正确设置Jenkins的版本和配置文件,以确保与您的项目兼容。
确保已正确设置SSH连接和安全提示,以便能够成功地将war包传输到远程服务器并启动。
确保已正确设置环境变量,以便能够正确部署和启动项目。
确保已正确设置远程服务器的连接和环境变量,以便能够正确部署和启动项目。
环境变量方面只有 source /etc/profile 应该不够。同样的命令手动执行可以启动成功,说明war没问题,与配置有关。手动启动成功使用的是哪个用户,将这个用户主目录的配置也执行一下。/root 或者是 /home/xxuser,用户目录里面的 .profile、.bashrc 等文件都看下,关键的配置可能就在其中。
引用chatGPT作答,从您提供的部分脚本来看,可能是由于自动启动war包的命令没有正确执行导致的问题。您可以通过以下步骤进行排查:
确认war包的启动脚本是否正确
手动启动war包成功后,请确保启动脚本的正确性。确认启动脚本中的命令是否能够正常启动您的SpringBoot项目,以及该脚本是否位于正确的路径下。
确认Jenkins是否有权限执行启动脚本
在Jenkins服务器上执行命令时,需要确保Jenkins用户具有执行启动脚本的权限。您可以尝试在Jenkins服务器上手动执行相同的启动脚本,以确认是否存在权限问题。
检查启动脚本中的路径是否正确
请确保在Jenkins服务器和远程服务器上使用的路径是正确的。例如,您在Jenkins服务器上打包的war包是否正确地传输到了远程服务器的正确路径下。
确认Jenkins是否已正确连接到远程服务器
在Jenkins中执行SSH命令时,需要确保Jenkins已经正确地连接到远程服务器。您可以尝试手动连接到远程服务器,并使用相同的SSH凭据执行命令。
查看日志
您可以查看Jenkins和远程服务器上的日志,以获取更多关于自动部署过程中发生的错误信息。可以在启动脚本中添加一些日志输出命令,以便更好地跟踪问题。
希望这些提示可以帮助您解决问题。
存在环境变量差异,
删掉第18行的source /etc/profile
把source /etc/profile这句加到 /opt/oa/run.sh 文件里试试