近段时间,公司项目采用java -jar 的方式直接启动项目,在调试Jenkins环境时,发现无论什么方式,都无法启动对应进程,查阅各种资料,说是因为Jenkins在构建完成后,为了不造成环境问题,会把衍生进程给自动杀死。于是查到有几种解决办法:
1、重设环境变量 BUILD_ID
BUILD_ID=dontKillMe
无效
2、sh脚本中
export BUILD_ID=dontKillMe
无效
3、临时改变 BUILD_ID值
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
sh /home/cloud/exec/test.sh
#改回原来的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
无效
4、通过Jenkins的启动参数禁用杀死衍生进程的特性
tomcat部署时修改 catalina.sh 脚本上加上上JAVA_OPTS="$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true";重启tomcat
无效
没错这上面的都通通无效
请教大佬后得知,这根本不是自动杀死衍生进程的问题
而是环境变量的问题
没想到吧
先说解决办法:
在构建后操作,脚本最前面加上
source /etc/profile
如同这样
原理:
通过SSH执行命令的两种形式
1、通过ssh登录后执行
两个重要的概念:interactive和login
在interactive + login shell模式中,Shell首先会加载/etc/profile
文件
2、通过ssh直接执行
两个重要的概念:non-interactive + non-login
它不会去执行/etc/profile
文件,而会去用户的HOME目录检查.bashrc
并加载