1つの CircleCI ワークフローで複数の Packer を切り替えてみる
昨日の記事だと、1個のレポジトリで1個の CircleCI を使って、1個の Packer が動いて、1つの AMI ができるという感じでした。
今日やりたいのは、こんな感じです。
- 1つのレポジトリ
- 1つの CircleCI
- 複数の Packer
- 1回に1個の AMI
まず、1つのレポジトリでやってしまうと、複数の Packer を動かせたとしても、一度に複数のイメージができてしまって、ちょっと無駄です。でも、1つのレポジトリで1つのイメージだとそれもまたレポジトリがたくさん必要になってしまいます。なので、1つのレポジトリだけど、ブランチを切った時に指定のイメージができるようなことをやってみたいと思います。
今回は、テストソースを用意してみました。
ブランチでの切り分け
ブランチで切り分けるにはどうすればいいかなということで・・・
version: 2
jobs:
build:
docker:
- image: hashicorp/packer:1.3.3
working_directory: ~/packer
steps:
- checkout
- attach_workspace:
at: ~/packer
- run:
name: Build
command: |
if [ "${CIRCLE_BRANCH}" == "ubuntu" ]; then
packer build build_ubuntu.json
fi
if [ "${CIRCLE_BRANCH}" == "amazon" ]; then
packer build build_amazon.json
fi
no_output_timeout: 30m
workflows:
version: 2
build-and-deploy:
jobs:
- build:
context: AMI
steps
->command
の中で、ブランチごとの切り分けを作りました。
ubuntu
のブランチだったら、build_ubuntu.json
が動いて、amazon
のブランチだったら、build_amazon.json
が動くようになっています。
実際は、
- git checkout -b ubuntu
- git push origin ubuntu
とやると CircleCI 側でプッシュをフックして AMI 作成まで動くハズです。
まとめ
今回はソースと昨日の記事を見て貰えればだいたいわかると思うので、かなり省略してます。
あんまり作成したいイメージが増えると切り分け多くなって面倒そうなので、何か他にいい方法ないかなーと思案してますが・・・