私は現在、post_processorを次のようにカスタマイズしています。
"output": "boxes/rhel-server-6.5-x64-{{.Provider}}-{{.BuildName}}_{{timestamp}}.box"
タイムスタンプの代わりに{{git_hash}}があると便利です。 パッカーでの関数呼び出し以外に、これを行う別の方法がある場合、私はそれを行う方法について十分に精通していないと思います。
これがどこで行われるかわかります:packer/config_template.go。
私はほとんどの人がこれが役に立つと思うだろうと思いました。
例:パペットスタックの構成全体を知りたい場合は、各ノードがどのパッカーボックスで構築されているかも知る必要がありますが、タイムスタンプではそれがわかりません。 監査のために、あるいは最も厄介な災害復旧戦略のために持っていることは良いことです。
考え? 代替案?
_編集_:
ダーティなgitツリーに対してpackerを実行するユースケースもあり、結果のハッシュは正確ではありません。 その場合、おそらく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に同意しました
これを読んでいる人のためのもう1つの小さなヒント:rev-parseに--short
引数を使用することをお勧めします。
packer -var "git_sha=`git rev-parse --short HEAD`"
21feafa9a86a45b3008d133f0803d2ac2087c63f
21feafa
のような値を取得します。
最も参考になるコメント
うーん。 git固有の関数を追加すると、同じレベルの専門知識がない可能性がある他のSCMへの扉が開かれるため、注意が必要だと思います。 次のようにuser-varを使用できない理由はありますか?
そして、変数を宣言します。
{{git_hash}}
はいくつかの仮定をしますが、最も重要なのはGitがインストールされていることです。 すべてのユーザーがGitを使用しているとは思わないので、gitがインストールされていないときに正しいUXを見つけるのは難しいかもしれません(エラーが発生したり、空の文字列に置き換えたりするなど)。