stage('Deploy'){
steps{
script{
withEnv(['BUILD_ID=dontkill']) {
sh "nohup java -jar test-0.0.1-SNAPSHOT.war &"
}
}
}
}
已经知道Jenkins的ProcessTreeKiller了,每个答案都建议这样做。我曾尝试在步骤块内使用环境,但没有运气。
詹金斯版本:2.60.1
管道插件:1.1.7
任何非常感谢您的帮助。
#1 楼
任何面临相同问题并使用管道项目的人,请设置JENKINS_NODE_COOKIE
而不是BUILD_ID
。它们都不适合管道项目。有关更多详细信息,请参阅https://issues.jenkins-ci.org/browse/JENKINS-28182。
评论
哇,那是里面的棒球。很高兴知道。
– B层
17年7月16日在7:18
#2 楼
替代解决方案。使用parallel
管道步骤以并行方式平等地运行前台和后台进程。优点之一是,您可以轻松地在Blue Ocean界面中访问后台进程的标准输出。
stage("Run") {
parallel {
stage('k3s') {
steps {
sh 'sudo /home/jenkins/k3s server --write-kubeconfig-mode 664 & echo $! > $WORKSPACE/k3s.pid; wait -n $(cat $WORKSPACE/k3s.pid) || true'
}
}
stage('test') {
steps {
sh 'sleep 1; ps -p $(cat $WORKSPACE/k3s.pid)'
sh 'while ! /home/jenkins/k3s kubectl get node; do sleep 1; done'
}
post {
always {
sh 'while ps -p $(cat $WORKSPACE/k3s.pid); do sudo kill -9 $(cat $WORKSPACE/k3s.pid); sleep 5; done'
}
}
}
}
}
评论
怎么了?错误信息?无声的失败?我没有正在运行的Java进程。这是我管道中的最后阶段,所以我想詹金斯会启动它并在下一刻终止它。
当直接在从站上运行命令时会发生什么?登录到代理程序/从属主机,转到作业的工作空间(或者是否已将其手动清除到war文件中的副本中,例如... / tmp),然后在双引号之间运行所有内容。
另外,如果没有清除工作空间,请在将运行shell命令的任何目录中查找名为nohup.out的文件。如果未以其他方式重定向输出,则nohup会自动记录到此类文件。
@BlairM当我通过非登录非交互式shell与jenkins用户一起尝试时,同一脚本运行良好。用双引号引起来没有区别。 nohup.out存在,但为0 KB。