5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Business Bank Group DevelopersAdvent Calendar 2018

Day 16

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

5
3
0

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
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?