🏷️

GitHub Actionsでデプロイがてらにタグも一緒にpushしたい!!!

2023/03/25に公開

GitHub ActionsでCICDを構築する際に、タグも一緒に付与したいな〜と思い調べてみました

この記事で伝えたいこと

  • PRがマージされたタイミングでタグも付与する方法

タグをpushするために必要なこと

  • 誰がマージしたか?
  • 付与するタグに載せるバージョン(ex: v1.0.0とか)
  • GitHub Actionsの設定を変更
    • 通常ではActionsはgitの読み込みしかできず、タグの付与(書き込み)はできないため

管理するバージョンを記したファイルを用意

私の場合は、root直下にdeploy_version.txtを用意しました

deploy_version.txt
v1.0.0

ファイルからバージョンを取得し、他stepで使えるようにする

catコマンドで取得した結果をversion変数に格納します。
格納したversion変数を他のstepで使えるようにset-outputで指定します。(他のstepから呼び出せるようにidをつけている)

- name: Get version
  id: get-version
  run: |
    version=$(cat deploy_version.txt)
    echo "::set-output name=version::$version"

PRをマージしたユーザー情報を取得

masterブランチ宛のPRをマージ(close)した際にCICDが発火するようにしている

on:
  pull_request:
    branches: master
    types: [closed]

secrets.GITHUB_TOKEN$GITHUB_EVENT_PATHはGitHub Actions側で自動で設定されているので、こちら側が特に設定する必要はない

- name: Get merge user information
  id: get-merge-user-info
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    AUTHOR_NAME=$(jq -r '.pull_request.merged_by.login' "$GITHUB_EVENT_PATH")
    AUTHOR_EMAIL=$(jq -r '.pull_request.merged_by.email' "$GITHUB_EVENT_PATH")
    echo "::set-output name=author-name::$AUTHOR_NAME"
    echo "::set-output name=author-email::$AUTHOR_EMAIL"

タグをpush

${{ steps.get-version.outputs.version }}で、バージョン情報を取得
git config ~~でPRをマージしたユーザー情報を載せることで、 「タグを付与したのはコイツやで!!」 がわかる(これがないと、「何処の馬の骨かもわからんやつにタグは振らせません!!帰りなさい!!」となる)

- name: Push git tag
  run: |
    IMAGE_TAG=${{ steps.get-version.outputs.version }}
    CURRENT_DATE=$(date +%Y/%m/%d)
    git config user.name "${{ steps.get-merge-user-info.outputs.author-name }}"
    git config user.email "${{ steps.get-merge-user-info.outputs.author-email }}"
    git tag -a $IMAGE_TAG -m 'master $CURRENT_DATE'
    git push origin $IMAGE_TAG

GitHub Actionsの設定を変更

通常ではActionsはgitの読み込みしかできず、タグの付与(書き込み)はできないため、設定を変更する。

Settings > Actions > General > Workflow permissionsRead and Write PermissionをONにする

https://github.com/ユーザー名/リポジトリ/settings/actions

参考記事

https://qiita.com/thaim/items/3d1a4d09ec4a7d8844ce
https://note.com/_umatoma/n/n98657e5c19f4
https://github.com/ad-m/github-push-action/issues/96

Discussion