在管道作业中运行后台进程


15

我正在寻找一种使用Jenkins声明性管道在后台运行Java进程的方法。下面是代码片段

stage('Deploy'){
        steps{
            script{
                withEnv(['BUILD_ID=dontkill']) {
                    sh "nohup java -jar test-0.0.1-SNAPSHOT.war &"
                }
            }
        }
}

已经知道詹金斯(Jenkins)的ProcessTreeKiller,并且每个答案都建议这样做。我尝试在步骤块内使用环境没有运气。

Jenkins版本:2.60.1

管道插件:1.1.7

任何帮助是极大的赞赏。


怎么了?错误信息?沉默失败?
B层

我没有正在运行的Java进程。这是我开发流程的最后阶段,所以我想詹金斯会启动它并在下一刻终止它。
Dharanidhar

当直接在从站上运行命令时会发生什么?登录到代理程序/从属主机,转到作业的工作空间(或者,如果已将其手动清除到war文件中的副本中/tmp,例如... ),然后运行双引号之间的所有内容。
B层

另外,如果没有清除工作空间,请在将运行shell命令的任何目录中查找名为nohup.out的文件。如果未以其他方式重定向输出,则nohup将自动记录到此类文件。
B层

@BlairM当我通过非登录非交互式shell与jenkins用户一起尝试时,同一脚本运行良好。用双引号运行没有区别。nohup.out存在,但为0 KB。
Dharanidhar

Answers:


16

面对相同问题并使用管道项目的任何人都应设置JENKINS_NODE_COOKIE而不是BUILD_ID

不要浪费你的时间设定HUDSON_COOKIEHUDSON_SERVER_COOKIEJENKINS_COOKIEJENKINS_SERVER_COOKIE。他们都没有为管道项目工作。

有关更多详细信息,请参阅https://issues.jenkins-ci.org/browse/JENKINS-28182


1
哇,那是里面的棒球。很高兴知道。
B层
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.