百度搜索了很长时间,很多种说法,但是都没说太明白,整合了很长时间,测出来了解决方法,仅测试了自由风格项目和流水线项目,其他的选项未测试,jenkins版本2.400。

以下为正文:
执行脚本时,因为jenkins会在构建结束时,将shell运行期间产生的进程全部关闭,所以nohup启动项目会被自动关闭
解决方法:
1、freestyle project :

选择新建自由风格的项目时,Build Steps选择Execute shell,命令行为:
cd xxx
sh xxx.sh
脚本里面需添加:
#!/bin/bash
#添加这个命令:export BUILD_ID=DongKillMe
#jenkins根据BUILD_ID自动关闭shell运行期间产生的进程,修改变量值,值的内容自定义,防止nohup被关闭
export BUILD_ID=DongKillMe
nohup java -Xms1024m -Xmx1024m -XX:MaxNewSize=512m -jar /xxx/xxx/xxx/xxx.jar >/dev/null 2>&1 &
2、新建流水线项目
脚本里面需添加:
#!/bin/bash
# 添加这两行
source /etc/profile
export JENKINS_NODE_COOKIE=dontKillMe
nohup java -Xms1024m -Xmx1024m -XX:MaxNewSize=512m -jar /xxx/xxx/xxx/xxxx.jar >/dev/null 2>&1 &
Pipeline script里面的内容有一处改动:

pipeline {
agent any
stages {
stage('部署程序') {
steps {
sh '''
#!/bin/bash
cd /xxx/xxx/xxx
#改动的地方:sh执行脚本改为bash,ubuntu系统会提示source:command not found,centos/redhat可以不修改
bash restart.sh
'''
echo '部署完成'
}
}
}
}
在Jenkins版本2.400中,执行脚本时由于jenkins会在构建结束时关闭shell进程,导致nohup启动的项目被自动关闭。为了解决这个问题,对于自由风格项目,可以在Executeshell中设置BUILD_ID变量避免进程被关闭;对于流水线项目,需要设置JENKINS_NODE_COOKIE变量并使用bash执行脚本。这种方法已测试于自由风格和流水线项目。

3161

被折叠的 条评论
为什么被折叠?



