Jenkins在奴隶上启动应用程序

时间:2018-04-23 12:49:21

标签: macos jenkins jenkins-pipeline

我尝试从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"'
   }
  }
}

1 个答案:

答案 0 :(得分:2)

这是预期的行为 在工作结束时,詹金斯会杀死由工作产生的任何剩余过程。

也可以禁用此功能 - 请参阅ProcessTreeKiller。 AFAIK只适用于整个Jenkins实例 - 不仅适用于特定的工作。

您可能需要重新配置作业,以便在完成之前完成所有工作,这样就不会留下剩余的进程。