【发布时间】:2019-08-07 11:17:56
【问题描述】:
我正在使用这个脚本来升级我的应用程序:
#!/usr/bin/env bash
set -u
set -e
set -x
JAVA_HOME="/opt/dabai/tools/jdk1.8.0_211"
APP_HOME="/data/jenkins/soa-robot-service"
APP_NAME="soa-robot-service-1.0.0-SNAPSHOT.jar"
PID=`ps -ef|grep -w ${APP_NAME}|grep -v grep|cut -c 9-15`
if [[ ${PID} -gt 1 ]]; then
kill -9 ${PID}
sleep 5
else
echo "Process not found"
fi
count=`ps -ef | grep ${APP_NAME} | grep -v "grep" | wc -l`
if [[ ${count} -lt 1 ]]; then
cd ${APP_HOME}
nohup ${JAVA_HOME}/bin/java -Xmx512M -Xms256M -jar \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt \
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5009 \
${APP_HOME}/${APP_NAME} >> ${APP_HOME}/soa-robot.log &
else
echo "process aready exists!"
exit 1
fi
当我在终端中执行时,它工作正常。当我使用远程 ssh(通过使用 jenkins 插件)在 Jenkins(Jenkins 版本 2.164.3)中执行时,这是命令:
# add executable privillege
chmod +x /data/jenkins/soa-room-service/upgrade.sh
# upgrade app
/bin/bash /data/jenkins/soa-room-service/upgrade.sh
它只执行部分shell脚本,这是输出:
[SSH] script:
# add executable privillege
chmod +x /data/jenkins/soa-room-service/upgrade.sh
# upgrade app
/bin/bash /data/jenkins/soa-room-service/upgrade.sh
[SSH] executing...
+ JAVA_HOME=/opt/dabai/tools/jdk1.8.0_211
+ APP_HOME=/data/jenkins/soa-room-service
+ APP_NAME=soa-room-service-1.0.0-SNAPSHOT.jar
++ ps -ef
++ grep -w soa-room-service-1.0.0-SNAPSHOT.jar
++ grep -v grep
++ cut -c 9-15
+ PID=' 16309 '
+ [[ 16309 -gt 1 ]]
+ kill -9 16309
+ sleep 5
++ grep soa-room-service-1.0.0-SNAPSHOT.jar
++ grep -v grep
++ ps -ef
++ wc -l
+ count=0
+ [[ 0 -lt 1 ]]
+ cd /data/jenkins/soa-room-service
[SSH] completed
[SSH] exit-status: 0
Finished: SUCCESS
最后这个命令没有执行(最后app没有运行)。但是当我第二次运行时,脚本执行完美。这让我很困惑,问题出在哪里?我应该怎么解决?
【问题讨论】:
-
你能展示一下你是如何执行它的吗?您使用 Jenkinsfile 还是脚本化管道?
-
我添加了使用 shell 脚本的方法,而不是 jenkinsfile.@mkemmerz
标签: jenkins