我试图在 Jenkins 工作完成后保持 Web 进程运行。
我研究了ProcessTreeKiller并尝试使用
BuildId
,如下所示,但它似乎不起作用:
BUILD_ID=dontKillMe /usr/apache/bin/httpd
我的命令(我想让它保持运行):
rails s &
如何解决这个问题?
您将其放入您的 执行 Shell 构建步骤中,而不是作为 jenkins 构建过程变量(这就是您在屏幕截图中使用 EnvInject 插件所做的事情)
因此,如果您想运行
rails &
,请执行以下操作:BUILD_ID=dontKillMe rails &
尝试:
(
set -e
export BUILD_ID=dontKillMe
export JENKINS_NODE_COOKIE=dontKillMe
rails &
) &
如果这是 Jenkinsfile 中的最后一个阶段(就像我的情况),您可以使用
BUILD_ID=dontKillMe
来解决该问题,如下所示:
stage("Run"){
steps{
withEnv(['BUILD_ID=dontKillMe']) {
script{
sh '<YOUR COMMAND HERE>'
}
}
}
}
就我而言,我在 Ubuntu 中有 Jenkins,并且我想永远运行 jenkins 文件的最后阶段,所以我使用了:
stage("Run app service forever"){
steps{
withEnv(['BUILD_ID=dontKillMe']) {
script{
kubeconfig(credentialsId: 'my_minikube_config_file', serverUrl: 'https://###.###.###.###:8443') {
sh 'kubectl port-forward --address 0.0.0.0 services/tecapp 5000:5000'
}
}
}
}
}
注意:不要在命令末尾添加 &,如下所示:
stage("Run"){
steps{
withEnv(['BUILD_ID=dontKillMe']) {
script{
sh '<YOUR COMMAND HERE> &'
}
}
}
}
当我使用&时,舞台不会永远运行。
通过
启动 jenkin 服务器java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8090
代码位于后台运行的 jenkinfile
stage("Starting API Server"){
withEnv(['BUILD_ID=dontkill']) {
sh 'mvn exec:java -Dexec.mainClass="APPLICATION_SERVER.App" & '
}
}