我尝试从Jenkins在我的OSX奴隶上启动我的构建应用程序但是在我的阶段结束时,Jenkins似乎终止了我的应用程序的过程。 我使用的声明性管道是:
stage('install-osx') {
agent { label 'OSX dev' }
steps {
unstash 'app-osx'
sh 'hdiutil attach bin/target/MyApp.dmg'
sh 'rm -rf /tmp/MyApp.app/'
sh 'cp -R /Volumes/MyApp/MyApp.app /tmp/'
sh 'nohup open /tmp/MyApp.app &'
sleep 10
sh 'hdiutil detach /Volumes/MyApp'
sh 'echo "END"'
}
}
我的应用程序启动时没有问题,但是一旦阶段结束,该过程就会被终止。 我尝试使用/不使用nohup并使用/不使用最终的'&'没有成功,行为总是一样的。
我需要设置JENKINS_NODE_COOKIE env变量来告诉Jenkins在阶段结束后不要杀死我的生成过程:
stage('install-osx') {
agent { label 'OSX dev' }
steps {
withEnv(["JENKINS_NODE_COOKIE=dontKillMe"]) {
unstash 'app-osx'
sh 'hdiutil attach bin/target/MyApp.dmg'
sh 'rm -rf /tmp/MyApp.app/'
sh 'cp -R /Volumes/MyApp/MyApp.app /tmp/'
sh 'nohup open /tmp/MyApp.app &'
sleep 10
sh 'hdiutil detach /Volumes/MyApp'
sh 'echo "END"'
}
}
}
答案 0 :(得分:2)
这是预期的行为 在工作结束时,詹金斯会杀死由工作产生的任何剩余过程。
也可以禁用此功能 - 请参阅ProcessTreeKiller。 AFAIK只适用于整个Jenkins实例 - 不仅适用于特定的工作。
您可能需要重新配置作业,以便在完成之前完成所有工作,这样就不会留下剩余的进程。