GitHub Actionsでブランチ名を取得してコンテナのイメージタグ名にする

はじめに

エキサイト株式会社 バックエンドエンジニアの山縣(@zsp2088dev)です。

普段の業務では、GitHub Actionsのworkflow_dispatchを使用してコンテナイメージをビルド、プッシュしています。 このとき、Gitのブランチ名をコンテナのイメージタグ名とするワークフローを使用しています。

これにより、コンテナレジストリやコンテナ実行環境で、どのブランチのコードが動作しているのかが簡単にわかるようになります。 本記事では、GitHub Actionsでブランチ名を取得して、コンテナのイメージタグ名にする方法を紹介します。

ワークフロー

下記に普段業務で使用しているワークフローの一部を示します。 このワークフローを実行すると、対象のブランチでコンテナイメージのビルドをして、それをコンテナレジストリにプッシュします。 また、コンテナレジストリには、Amazon ECRを使用しています。

name: build and push sample
run-name: ${{ github.workflow }} (${{ github.ref_name }})

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1-node16
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      - name: Get tag
        id: get-tag
        run: |
          TAG=$(echo ${{ github.ref_name }} | sed -e 's/\//\-/g')
          echo "value=${TAG}" >> $GITHUB_OUTPUT

      - name: Get image name
        id: get-image-name
        run: |
          echo "value=${{ steps.login-ecr.outputs.registry }}/sample:${{ steps.get-tag.outputs.value }}" >> $GITHUB_OUTPUT

      - name: Build and push to Amazon ECR
        run: |
          docker build . \
              -f Dockerfile \
              -t ${{ steps.get-image-name.outputs.value }}

          docker push ${{ steps.get-image-name.outputs.value }}

タグ名を取得する

ブランチ名は、${{ github.ref_name }}で取得することができます。 しかし、以下の引用の通り、ブランチ名でよく使用される/は、イメージタグ名に含めることができません。

タグ名に含められるのは有効な ASCII 文字で、(アルファベット)小文字と大文字、数字、アンダースコア、ピリオド、ダッシュです。 タグ名はピリオドやダッシュで開始できません。そして最大で 128 文字です。

docs.docker.jp

業務では、ブランチ名に/を使用しています。 そのため、sedコマンドを使用してイメージタグ名に使用できる-に置換する処理を追加しています。

置換前後の例を以下の表に示します。

置換前 置換後
feature/add-book-title feature-add-book-title
feature/fix/book-title feature-fix-book-title

プッシュしたイメージ名を確認する

Amazon ECRにプッシュしたコンテナイメージの、イメージタグ名を確認します。 feature/...bugfix/...といったブランチ名の/が、-に置換されていることを確認できます。

おわりに

GitHub Actionsでブランチ名を取得して、コンテナのイメージタグ名にする方法を紹介しました。

本記事が誰かの役に立てれば幸いです。

採用アナウンス

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しています。 また、長期インターンも歓迎しています。

カジュアル面談からもOKです。少しでもご興味がございましたら、お気軽にご連絡頂ければ幸いです。

▼ 募集職種一覧 ▼ recruit.jobcan.jp