我遇到了一个奇怪的问题,当我运行 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"
您遇到了 Process Tree Killer,这是 Jenkins 的一个“功能”,它会在构建终止时杀死由构建启动的所有进程。目的是防止 Jenkins 构建启动服务、守护程序或其他可能影响其他构建或 Jenkins 机器本身的长期进程。
如 wiki 和这个 SO question 中所述,有几种方法可以禁用此功能:
这些修复是:
-Dhudson.util.ProcessTree.disable=true
(就我个人而言,我在这个解决方案中获得了最好的运气)BUILD_ID
(对于 Freestyle 和其他非流水线作业)或JENKINS_NODE_COOKIE
(对于流水线作业)