You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Packer前置provisioner失败时仍下载VM中的测试报告?

解决Packer测试失败后仍能下载测试报告的问题

要实现测试失败时仍能下载报告,核心是让执行测试的shell provisioner不因为测试失败终止Packer构建,后续下载报告后再根据测试结果决定最终构建是否失败,具体步骤如下:

  • 修改测试命令,保存退出码并强制返回0
    修改shell provisioner的inline命令,让测试命令执行后保存原始退出码到文件,同时让shell命令本身返回0,避免Packer中途终止:

    provisioner "shell" {
      inline = ["py.test --junit-xml /tmp/testreport.xml -v /tmp/test.py; echo $? > /tmp/test_exit_code.txt"]
    }
    
  • 添加下载退出码文件的provisioner
    和下载测试报告的provisioner一起,把保存退出码的文件也下载到本地:

    provisioner "file" {
      destination = "${var.build_dir}/testreport.xml"
      direction   = "download"
      source      = "/tmp/testreport.xml"
    }
    
    provisioner "file" {
      destination = "${var.build_dir}/test_exit_code.txt"
      direction   = "download"
      source      = "/tmp/test_exit_code.txt"
    }
    
  • 本地校验退出码,决定构建最终状态
    添加一个shell-local provisioner,在本地读取下载的退出码文件,如果测试原本失败(退出码非0),则让整个Packer构建以失败告终:

    provisioner "shell-local" {
      inline = [
        "EXIT_CODE=$(cat ${var.build_dir}/test_exit_code.txt)",
        "if [ $EXIT_CODE -ne 0 ]; then exit $EXIT_CODE; fi"
      ]
    }
    

这样调整后,不管测试是否成功,Packer都会先完成报告和退出码文件的下载,再根据测试结果决定构建是否失败,既保留了测试失败时的终止逻辑,又能拿到完整的测试报告。

内容的提问来源于stack exchange,提问作者mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:42:37