我制作了一个批处理文件,可以在无头模式下运行 Oracle 的 VirtualBox。当我在 Windows 命令提示符中运行该命令时,它工作正常,没有任何错误。
C:\Program Files\Oracle\VirtualBox>VBoxManage startvm "Ubuntu" --type headless
Waiting for VM "Ubuntu" to power on...
VM "Ubuntu" has been successfully started.
C:\Program Files\Oracle\VirtualBox>
但是,当我通过 Jenkins 调用具有相同命令的批处理脚本时,出现以下错误:
C:\Program Files\Oracle\VirtualBox>VBoxManage startvm "Ubuntu" --type headless
VBoxManage.exe: error: Failed to create the VirtualBox object!
VBoxManage.exe: error: The object is not ready
VBoxManage.exe: error: Details: code E_ACCESSDENIED (0x80070005), component VirtualBoxClientWrap, interface IVirtualBoxClient
从 Jenkins 调用的每个 VirtualBox 命令都会给出相同的错误。
C:\Program Files\Oracle\VirtualBox>VBoxManage sharedfolder add "Ubuntu" --name BranchRepo --hostpath "A PATH" --automount
VBoxManage.exe: error: Failed to create the VirtualBox object!
VBoxManage.exe: error: The object is not ready
VBoxManage.exe: error: Details: code E_ACCESSDENIED (0x80070005), component VirtualBoxClientWrap, interface IVirtualBoxClien
关于如何解决这个问题有什么建议吗?是否有某种特定的方式来授予 Jenkins 所需的权限?
运行它的用户似乎具有不正确的权限。
您可以尝试以单独的本地管理员用户身份运行 Jenkins 的服务。
开始=>“服务”=>滚动到Jenkins服务=>右键单击=>属性=>“登录”=>“此帐户”=>指定本地管理员帐户。
编辑:
编辑“注册表编辑器”有效
我遇到了同样的问题并设法解决了它,所以我会在这里回答我船上未来的搜索者!
这是由于我的用户没有启动 VirtualBox 应用程序 和/或 VirtualBox 系统服务 DCOM 对象的权限造成的。
默认情况下,通过 COM 使用 VirtualBox 所需的权限意味着您必须是“交互式用户或管理员”。您的 Jenkins 用户可能两者都不是,因此在尝试实例化 COM 对象时会得到 E_ACCESSDENIED
。当您使用命令提示符时它会起作用,因为这样您的用户是交互式的。 (您可以从命令提示符和 Jenkins 运行
whoami /groups
来查看同一用户如何被两种不同的环境以不同的方式“对待”。)
要更改所需的权限:
打开Windows的
组件服务