はじめに
エキサイト株式会社 バックエンドエンジニアの山縣(@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 文字です。
業務では、ブランチ名に/
を使用しています。
そのため、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