如何在Jenkins流水线中调用VirtualBox虚拟机内MSYS2 Shell并获取输出与返回码
问题背景
需在CI流水线的Windows环境中构建软件,当前采用Linux主机上的VirtualBox运行搭载MSYS2 Shell的Win10虚拟机,Jenkins代理部署于Linux主机。核心问题:无法在MSYS2 Shell中远程执行命令并获取实时输出,更严重的是命令执行失败时无法获取返回码,直接导致流水线超时。
已尝试方案
1. vboxmanage guestcontrol
- 通过
msys2_shell.cmd传递各类参数,要么无法运行,要么PATH等环境变量配置异常,推测vboxmanage guestcontrol会先通过cmd.exe等Windows层执行命令,导致与MSYS2 Shell交互异常。示例命令vboxmanage guestcontrol "${VM_NAME}" --username <name> --password <psd> run -- C:/msys64/msys2_shell.cmd -ucrt64 "ls -a > Z:/ls.log"可执行,但无法实时查看控制台输出,执行exit 1时流水线阶段不会触发失败。 - 尝试通过cmd.exe、配置MSYS2为默认Shell的Windows Terminal、PowerShell运行MSYS2命令,均无效果。
2. SSH
- 在虚拟机中配置开机自启的SSH服务器:
- 采用msys2 sshd方案,PATH等环境变量配置异常。交互式SSH登录MSYS2 Shell正常,但非交互式执行命令时环境异常,提示
ls is not a command,推测Windows OpenSSH会先通过Windows Shell执行命令,无法直接调用MSYS2 Shell,不符合流水线需求。 - 尝试配置Windows SSH服务器并在注册表设置DefaultShell为MSYS2,同样无效。
- 采用msys2 sshd方案,PATH等环境变量配置异常。交互式SSH登录MSYS2 Shell正常,但非交互式执行命令时环境异常,提示
内容的提问来源于stack exchange,提问作者0000110001111000100010
相关产品推荐
相关产品推荐

