この記事は、Business Bank Group Developers Advent Calendar 16日目の記事です。
Cloud Buildに関しては手前味噌ですが、以下の記事を参考にしてください。
Cloud Buildでdockerイメージをビルドする時に、Gitのブランチ名をタグに指定するのはよくやる事だと思います。
dockerの場合
例えば、dockerコマンドでタグ付けする場合は、
docker build -t <repo name>:$(git rev-parse --abbrev-ref HEAD) ./
こんな感じかと。
しかし、これだと問題が生じる可能性があります。
ブランチ名に/
が入っているとエラーになります。
ブランチのネーミングに以下のようなルールがある場合です。
- feature/xxx
- epic/xxx
以下で対応可能です。
docker build -t <repo name>:$(git rev-parse --abbrev-ref HEAD | tr / -) ./
/
を -
に置き換えて一件落着。
Cloud Buildの場合
前述の方法でブランチ名をつけてみましょう。
しかし、Cloud Buildではそう簡単にはいきません。
Cloud Buildのカスタムビルドではshellを実行できません。
NGな例
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- "gcr.io/$PROJECT_ID/$REPO_NAME:$(echo $BRANCH_NAME | tr / -)"
- '.'
これだとshellの文字列がそのまま出力されてしまいます。
OKな例
steps:
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- "-cvx"
- docker build
-t asia.gcr.io/$REPO_NAME/$REPO_NAME:$(echo $BRANCH_NAME | tr / -)
.
これでいけます。
ポイントは、dockerコンテナの中でビルドしているところです。
shellも実行できます。
この方法を使えば実質なんでもできちゃいます。
さいごに
Cloud Buildはビルドツールとしてはガチガチな印象を少し持ってましたが、このTipsを見つけてかなり柔軟性が増しました。
今後も様々な用途でCloud Buildを使ってみようと思っています。
明日は、@kyokoshimizuさんの番です。
よろしくお願いします!