github actionsを使ってデプロイすることも多いと思います。
今回は、slidict.io で使用しているデプロイフローをご紹介します。
slidct.io はAKS対してGithub actionsを使って、mainブランチにマージされた際にデプロイをしています。その際にタグを自動でつけstaging, productionそれぞれどのタグがリリースされているのかを把握し、リリースノートで何をリリースしたかを後から見返せるようにしています。
slidict.io で実践しているデプロイフロー
- mainブランチにマージする
- vx.x.xの形式で自動タグ付け
- draftのリリースが作成
- stagingへデプロイが行われる
- stagingで動作確認など
- リリースを公開する
- productionへデプロイが行われる
上記が、slidict.io で使っているデプロイの流れになります。この記事では、黄色で塗りつぶしている部分を説明していきます。
2. vx.x.xの形式で自動タグ付け
github-tag-bump を使用してmainブランチにマージされた際にタグを付与しています。
- name: Github Tag Bump
uses: anothrNick/github-tag-action@1.52.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEFAULT_BUMP: patch
WITH_V: true
3. draftのリリースの作成
slidict.ioでは、stagingへのデプロイと同時にgithubのリリースが作成されます。リリースの作成には、過去のドラフトリリース削除、新たにドラフトリリースを作成する2つの作業を行っています。
- name: Delete draft_release_tags
run: |
set -xe
gh release list | cut -f1 > draft_release_tags
for release_tag in $(gh release list --exclude-drafts | cut -f1)
do
echo -e "$(cat draft_release_tags |grep -v $release_tag)" > draft_release_tags
done
if [ ! -s draft_release_tags ]; then
for tag in $(cat draft_release_tags)
do
[ -n "$tag" ] && gh release delete $tag
done
fi
- name: Create release
run: |
LATEST_TAG=$(git tag -l --sort -authordate| head -n 1 | cut -f1 -d" ")
LAST_RELEASE_TAG=$(gh release list --exclude-drafts --limit 1 | cut -f1)
echo -e "## What's Changed" > changeslog
git log $LAST_RELEASE_TAG..$LATEST_TAG --oneline --pretty="%s" | grep -v Merge | sed 's/^/* /g' >> changeslog
echo -e "" >> changeslog
echo -e "**Full Changelog**: https://github.com/slidict/rails-docker-compose-sample/compare/$LAST_RELEASE_TAG...$LATEST_TAG" >> changeslog
gh release create $LATEST_TAG -F changeslog --draft
6. リリースを公開する
この作業はgithub上でpublishするだけですが、github actionsでは以下のようにトリガーしています。
name: DeployToProduction
on:
release:
types: [released]
jobs:
deploy:
今回のサンプルは以下のレポジトリに格納しています。
https://github.com/slidict/rails-docker-compose-sample/tree/main/.github/workflows
コメントを残す