用于运行 vagrant up 的 Jenkinsfile 管道

用于运行 vagrant up 的 Jenkinsfile 管道

我遇到了一个奇怪的问题,当我运行 vagrant up 时,虚拟机构建良好并按预期工作,但是当我在 Jenkinsfile 管道中运行相同的命令时,构建完成后,虚拟机会关闭并创建日志。

Log created: 2021-01-15T12:32:44.144568000Z
Process ID:  9678 (0x25ce)
Parent PID:  1 (0x1)
Executable:  /usr/lib/virtualbox/VBoxSVC
Arg[0]: /usr/lib/virtualbox/VBoxSVC
Arg[1]: --auto-shutdown
AddRef: illegal refcnt=3221225469 state=2

这是 vagrant 的管道代码

stage('Run Vagrant'){
    sh 'cd /var/lib/jenkins/workspace/jenkins-file_master/ansible/; vagrant up'
}

Jenkins config设置为同一个用户,这样环境就是一样的。

# user and group to be invoked as (default to jenkins)
JENKINS_USER=myusername
JENKINS_GROUP="adm cdrom sudo dip plugdev lpadmin lxd sambashare docker vboxusers"

答案1

您遇到了进程树终止程序,这是 Jenkins 的一项“功能”,它会在构建终止时终止构建启动的所有进程。目的是防止 Jenkins 构建启动服务、守护进程或其他可能影响其他构建或 Jenkins 机器本身的长期进程。

有几种方法可以禁用此功能,如 wiki 和这个 SO 问题中所述:

这些修复包括:

  • 在 Jenkins 进程上设置 Java 参数-Dhudson.util.ProcessTree.disable=true(就我个人而言,这个解决方案效果最好)
  • 在构建过程中,更改环境变量的值BUILD_ID(对于 Freestyle 和其他非 Pipeline 作业)或JENKINS_NODE_COOKIE(对于 Pipeline 作业)

相关内容