我目前像这样自定义我的 post_processor:
"output": "boxes/rhel-server-6.5-x64-{{.Provider}}-{{.BuildName}}_{{timestamp}}.box"
最好有 {{git_hash}} 而不是时间戳。 如果除了打包器中的函数调用之外还有另一种方法,那么我想我对如何做到这一点还不够熟悉。
我知道这可能在哪里完成:packer/config_template.go。
我想大多数人会觉得这很有用。
例如:如果我们想知道我们的 puppet 堆栈的整个配置,我们还应该知道每个节点是在哪个打包器盒上构建的,而时间戳没有给我们。 对于审计甚至最讨厌的灾难恢复策略来说,这是一件好事。
想法? 备择方案?
_编辑_:
还有针对脏 git 树运行打包程序的用例,其中生成的哈希值不准确。 在这种情况下,您可能希望 git 哈希返回“dirty_tree”。
嗯。 我认为添加特定于 git 的功能很棘手,因为它为我们可能没有相同专业水平的其他 SCM 打开了大门。 您是否有理由不能为此使用 user-var:
packer -var "git_sha=`git rev-parse HEAD`"
然后声明变量:
{
"variables": {
"git_sha": "none"
}
}
{{git_hash}}
做了一些假设,最重要的是 - 你已经安装了 Git。 我不认为我们所有的用户都使用 Git,因此在未安装 git 时找到正确的 UX 可能很困难(我们是否出错,替换为空字符串等)。
同意@sethvargo
给正在阅读本文的人的另一个小提示:您可能希望使用--short
参数进行 rev-parse:
packer -var "git_sha=`git rev-parse --short HEAD`"
获得类似21feafa
而不是21feafa9a86a45b3008d133f0803d2ac2087c63f
的值。
最有用的评论
嗯。 我认为添加特定于 git 的功能很棘手,因为它为我们可能没有相同专业水平的其他 SCM 打开了大门。 您是否有理由不能为此使用 user-var:
然后声明变量:
{{git_hash}}
做了一些假设,最重要的是 - 你已经安装了 Git。 我不认为我们所有的用户都使用 Git,因此在未安装 git 时找到正确的 UX 可能很困难(我们是否出错,替换为空字符串等)。