Jenkins踩坑之旅:nohup后台执行shell命令

有时我们希望将某个命令放在后台执行,然后并行(异步)执行其他命令。但在Jenkins上很容易遇到无法真正将命令放到后台运行的问题。

原因是pipeline在退出node{}的时候,会默认清理自己发出的每个shell命令,即使使用了nohup。

例如如下代码无法在后续的进程查找中找到top进程

pipeline {
    agent {
        label 'master'
    }
    stages {
        stage('Example') {
            steps {
                script {
                    node("vm-1") {
                        sh "nohup top -b > /dev/null &"
                    }
                    node("vm-1") {
                        sh "ps -ef | grep top"
                    }
                }
            }
        }
    }
}

执行结果如下

[Pipeline] sh
+ grep top
+ ps -ef
tengrui   21907  21904  0 06:10 ?        00:00:00 grep top

解决方法是加入环境变量BUILD_ID=DONTKILLME

pipeline {
    agent {
        label 'master'
    }
    stages {
        stage('Example') {
            steps {
                script {
                    node("vm-1") {
                        sh "BUILD_ID=dontKillMe nohup top -b > /dev/null &"
                    }
                    node("vm-1") {
                        sh "ps -ef | grep top"
                    }
                }
            }
        }
    }
}

运行结果如下

[Pipeline] sh
+ ps -ef
+ grep top
tengrui   21915      1  1 06:11 ?        00:00:00 top -b
tengrui   21925  21922  0 06:11 ?        00:00:00 grep top

注:

  1. 当pipeline退出node{}代码块的时候,才会清理shell进程
  2. 也可以使用JENKINS_NODE_COOKIE=dontKillMe
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值