我刚刚开始使用 Packer,但是遇到了几次构建失败的情况,我非常希望能登录到虚拟机中去查找原因。然而,似乎没有 packer login
或者类似的命令可以让我进入 shell。相反,在我有机会进行调试之前,执行就终止并且拆除了虚拟机。
我知道我可以使用 --debug 标志在每个阶段暂停执行,但是我想知道是否有一种方法可以在运行失败后(且在清理之前)暂停,然后在我的调试完成后再进行清理。
谢谢。
我刚刚开始使用 Packer,但是遇到了几次构建失败的情况,我非常希望能登录到虚拟机中去查找原因。然而,似乎没有 packer login
或者类似的命令可以让我进入 shell。相反,在我有机会进行调试之前,执行就终止并且拆除了虚拟机。
我知道我可以使用 --debug 标志在每个阶段暂停执行,但是我想知道是否有一种方法可以在运行失败后(且在清理之前)暂停,然后在我的调试完成后再进行清理。
谢谢。
packer
的最大烦恼。幸运的是,现在packer build
有了一个名为-on-error
的选项,可以提供给你选择。
packer build -on-error=ask ...
来拯救。
-on-error=cleanup
(默认),-on-error=abort
,-on-error=ask
- 在构建失败时选择要执行的操作。cleanup清理之前的步骤,删除临时文件和虚拟机。abort退出而不进行任何清理,这可能需要下一次构建使用-force
。ask会显示提示,并等待您决定清理、中止或重试失败的步骤。
在广泛使用Packer后,-debug
标志非常有帮助。一旦进程暂停,您可以使用密钥(在当前目录中)SSH到框中,并找出发生了什么。
我通常处理这种情况是在失败的步骤后面的脚本内联部署程序中添加一个长时间的休眠,然后我可以通过ssh登录到机器并查看发生了什么。当然,调试标志很有用,但如果你在远程运行packer构建(我在jenkins上运行),你不能真正坐在那里按按钮。
在打包之前,我会尝试在所有要打包的内容上运行测试 - 使用Chef部署程序,我在所有东西上都有kitchen测试,然后再进行打包。在打包过程中,除了packer之外,尝试调试任何其他东西都非常麻烦。
如果Packer构建失败,请首先检查构建过程卡在哪里,但请按照以下顺序进行检查:
在查找信息时,我遇到了许多与Packer相关的错误报告/功能请求。
显然,有人在一年前向virtualbox和vmware builders添加了新功能(https://github.com/mitchellh/packer/issues/409),但它尚未合并到主分支中。
在另一个错误报告中(https://github.com/mitchellh/packer/issues/1687),他们正在考虑为--debug添加其他功能,但似乎停滞不前。
楼主没有提到具体的错误。
在我的情况下,问题是"packer build..."一直停在"等待SSH可用",直到达到30分钟的超时时间(与通常的8分钟相比)。
将VirtualBox 7更改为VirtualBox 6后,构建完成了。