タグとリリースノートでお手軽デプロイ(Github actions)

デプロイフロー

github actionsを使ってデプロイすることも多いと思います。
今回は、slidict.io で使用しているデプロイフローをご紹介します。

slidct.io はAKS対してGithub actionsを使って、mainブランチにマージされた際にデプロイをしています。その際にタグを自動でつけstaging, productionそれぞれどのタグがリリースされているのかを把握し、リリースノートで何をリリースしたかを後から見返せるようにしています。

slidict.io で実践しているデプロイフロー

  1. mainブランチにマージする
  2. vx.x.xの形式で自動タグ付け
  3. draftのリリースが作成
  4. stagingへデプロイが行われる
  5. stagingで動作確認など
  6. リリースを公開する
  7. 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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です