LoginSignup
3

More than 3 years have passed since last update.

Cloud BuildでGitのブランチ名をdockerイメージのタグに指定するコツ

Posted at

この記事は、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な例

cloudbuild.yml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args:
  - 'build'
  - '-t'
  - "gcr.io/$PROJECT_ID/$REPO_NAME:$(echo $BRANCH_NAME | tr / -)"
  - '.'

これだとshellの文字列がそのまま出力されてしまいます。

OKな例

cloudbuild.yml
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さんの番です。
よろしくお願いします!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3