故障排除失败的Packer构建

13

我刚刚开始使用 Packer,但是遇到了几次构建失败的情况,我非常希望能登录到虚拟机中去查找原因。然而,似乎没有 packer login 或者类似的命令可以让我进入 shell。相反,在我有机会进行调试之前,执行就终止并且拆除了虚拟机。

我知道我可以使用 --debug 标志在每个阶段暂停执行,但是我想知道是否有一种方法可以在运行失败后(且在清理之前)暂停,然后在我的调试完成后再进行清理。

谢谢。


Tejay - 你最终解决了这个问题吗?我也在想同样的事情。 - Joe the Coder
不需要。我只是使用 --debug。 - Tejay Cardon
是的 - 我也只是使用 --debug。虽然有点繁琐,但能够满足你的需求,而且肯定可以改进。 - gsaslis
6个回答

15
这是我对于packer的最大烦恼。幸运的是,现在packer build有了一个名为-on-error的选项,可以提供给你选择。 packer build -on-error=ask ...来拯救。
根据packer build文档:

-on-error=cleanup(默认),-on-error=abort-on-error=ask - 在构建失败时选择要执行的操作。cleanup清理之前的步骤,删除临时文件和虚拟机。abort退出而不进行任何清理,这可能需要下一次构建使用-force。ask会显示提示,并等待您决定清理、中止或重试失败的步骤。


10

在广泛使用Packer后,-debug标志非常有帮助。一旦进程暂停,您可以使用密钥(在当前目录中)SSH到框中,并找出发生了什么。


2

我通常处理这种情况是在失败的步骤后面的脚本内联部署程序中添加一个长时间的休眠,然后我可以通过ssh登录到机器并查看发生了什么。当然,调试标志很有用,但如果你在远程运行packer构建(我在jenkins上运行),你不能真正坐在那里按按钮。

在打包之前,我会尝试在所有要打包的内容上运行测试 - 使用Chef部署程序,我在所有东西上都有kitchen测试,然后再进行打包。在打包过程中,除了packer之外,尝试调试任何其他东西都非常麻烦。


嗨Ele,你如何在不使用--debug标志的情况下ssh进入框中,该标志会打印连接详细信息、密码和私钥等? - xpt

0

如果Packer构建失败,请首先检查构建过程卡在哪里,但请按照以下顺序进行检查:

  1. 引导命令是否正确?
  2. 预设配置是否正确?
  3. 如果1和2都没问题,则表示盒子已经启动,接下来要检查的是登录:SSH密钥、端口等。
  4. 最后检查一下提供脚本中是否有任何问题。

0

0

楼主没有提到具体的错误。

在我的情况下,问题是"packer build..."一直停在"等待SSH可用",直到达到30分钟的超时时间(与通常的8分钟相比)。

将VirtualBox 7更改为VirtualBox 6后,构建完成了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接