🏷️
GitHub Actionsでデプロイがてらにタグも一緒にpushしたい!!!
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 permissions
のRead and Write Permission
をONにする
https://github.com/ユーザー名/リポジトリ/settings/actions
参考記事
Discussion