【发布时间】:2020-12-29 20:49:24
【问题描述】:
我有一个 Jenkins 阶段:
stage("Deploy on Server") {
steps {
script {
sh 'sshpass -p "password" ssh -o "StrictHostKeyChecking=no" username@server "cd ../../to/app/path; sh redeploy.sh && exit;"'
}
}
}
以及我的服务器(centos)上的一些脚本:
重新部署.sh:
declare -i result=0
...
sh restart.sh
result+=$?
echo "Step 6: result = " $result
# 7. if restart fail, restart /versions/*.jar "sh restart-previous.sh"
if [ $result != "0" ]
then
sh restart-previous.sh
result+=$?
fi
echo "Deploy done. Final result: " $result
restart.sh
nohup java -Xms8g -Xmx8g -jar app-name-1.0-allinone.jar &
因为我从 Jenkins 执行 redeploy.sh 脚本,所以问题是它会紧贴 Jenkins 控制台并在那里记录所有应用程序事件,而不是在部署我的应用程序的补丁中创建一个 nohup 文件。
在一些例子中我发现推荐在ssh命令中直接使用nohup,但是我不能这样做,因为我需要执行一个脚本(有所有的步骤,nohup不能这样做)而不是直接一个命令。
exit cmd 将被忽略,因为之前的命令永远不会关闭。
谢谢
【问题讨论】:
-
您使用的是声明式管道吗?
restart.sh在詹金斯控制台输出中打印数据有什么问题?我建议您让它在Console Output中打印,但找到一种方法来屏蔽包含敏感数据的参数,以便在詹金斯控制台输出中显示为******。我还建议您使用像sh ''' echo "This is my shell script" '''这样的 shell 语法,如下所述:参考:jenkins.io/doc/pipeline/tour/running-multiple-steps -
我找到了一种方法......需要从 cmd 强制登录到日志文件,如“nohup java -Xms8g name.jar /null>> logfile.log 2>&1 &”。这是在centos服务器中。但是,问题是当我尝试终止现有进程时,因为在 jenkins 中返回错误 255,即使命令执行成功:def statusCode = sh returnStatus: true, script 'sshpass -p password username@server sh redeploy.嘘'