はじめに
昨今、CI/CDでテストやリリース作業を自動化されているプロダクトやチームは多いと思います。
今回、GitHubのリリース機能を活用したGitHub ActionsでのCI/CDフローを作成しましたので、その設定内容について紹介します。
CDには継続的デリバリー(Continuous Delivery)と継続的デプロイメント(Continuous Deployment)の2つの意味がありますが、本記事では2つを区別するためにCD(Continuous Delivery)とCD(Continuous Deployment)と表現しています。
実現したいCI/CDフロー
今回実現したいCI/CDフローの概要図はこちらになります。
CI/CDとしては3つのポイントでワークフローが自動実行されるように設定を行いました。
- CI(Continuous Integration): GitHub上でのPull Requestの作成・更新をトリガーに実行する
- CD(Continuous Delivery): mainブランチへのPull Requestマージをトリガーに実行する
- CD(Continuous Deployment): GitHub上でのRelease作成をトリガーに実行する
実際の設定内容
それでは実際に設定したGitHub Actionsの設定内容をサンプルを踏まえてご紹介します。
CI(Continuous Integration)
CIはmainブランチへのPull Requestの作成・更新をトリガーに実行するため、以下のような設定にしています。
name: 'Continuous Integration Flow.'
on:
pull_request:
branches:
- 'main'
types:
- 'opened'
- 'synchronize'
- 'reopened'
jobs:
continuous-integration:
name: 'Continuous Integration.'
runs-on: ubuntu-latest
steps:
- run: echo Continuous Integration!
設定値のポイントは以下になります。
- mainブランチへのPull Requestのみ実行したいため、
on.pull_request.branches
指定にmain
ブランチを指定する - Pull Requestのクローズ時はCIを実行させないため、
on.pull_request.types
にopened
、synchronize
、reopened
の3つを指定する
CD(Continuous Delivery)
CD(Continuous Delivery)はmainブランチへのPull Requestマージをトリガーに実行するために、以下のように設定しています。
name: 'Continuous Delivery Flow.'
on:
pull_request:
branches:
- 'main'
types:
- 'closed'
jobs:
continuous-delivery:
name: 'Continuous Delivery.'
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
steps:
- run: echo Continuous Delivery!
設定値のポイントは以下になります。
- mainブランチへのPull Requestのみ実行したいため、
on.pull_request.branches
指定にmain
ブランチを指定する - Pull Requestのマージのみを実行させることは現時点で不可能なため、
on.pull_request.types
にclosed
を指定する - CloseだけだとPull RequestはMergeされたかMergeせずにCloseされたか判断できないため、jobのif文でPull Requestがマージされたとき(
github.event.pull_request.merged == true
) だけ実行するようにする
CD(Continuous Deployment)
CD(Continuous Deployment)はGitHub上でのRelease作成をトリガーに実行するために、以下のように設定しています。
name: 'Continuous Deployment Flow.'
on:
release:
types:
- 'released'
jobs:
continuous-deployment:
name: 'Continuous Deployment.'
runs-on: ubuntu-latest
steps:
- run: echo Continuous Deployment!
設定値のポイントは以下になります。
- Pre Release作成時ではなくRelease作成時のみ実行したいため、
on.release.types
指定にreleased
を指定する
おわりに
今回、GitHubのリリース機能を使ったCI/CDの設定例をご紹介しました。
実際のプロダクトでは上記の設定に加えて、Release DrafterによるDraft Releaseの自動作成もCI/CDで実現しています。
これからCI/CDをGitHub Actionsで実装される方の参考になれば幸いです。