LoginSignup
3
1

More than 1 year has passed since last update.

GiuHubのリリース機能を使ったCI/CDをGitHub Actionsで構築する

Last updated at Posted at 2021-12-11

はじめに

昨今、CI/CDでテストやリリース作業を自動化されているプロダクトやチームは多いと思います。
今回、GitHubのリリース機能を活用したGitHub ActionsでのCI/CDフローを作成しましたので、その設定内容について紹介します。

CDには継続的デリバリー(Continuous Delivery)と継続的デプロイメント(Continuous Deployment)の2つの意味がありますが、本記事では2つを区別するためにCD(Continuous Delivery)とCD(Continuous Deployment)と表現しています。

実現したいCI/CDフロー

今回実現したいCI/CDフローの概要図はこちらになります。

cicd-flow.png

CI/CDとしては3つのポイントでワークフローが自動実行されるように設定を行いました。

  1. CI(Continuous Integration): GitHub上でのPull Requestの作成・更新をトリガーに実行する
  2. CD(Continuous Delivery): mainブランチへのPull Requestマージをトリガーに実行する
  3. 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!

設定値のポイントは以下になります。

  1. mainブランチへのPull Requestのみ実行したいため、on.pull_request.branches指定にmainブランチを指定する
  2. Pull Requestのクローズ時はCIを実行させないため、on.pull_request.typesopenedsynchronizereopenedの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!

設定値のポイントは以下になります。

  1. mainブランチへのPull Requestのみ実行したいため、on.pull_request.branches指定にmainブランチを指定する
  2. Pull Requestのマージのみを実行させることは現時点で不可能なため、on.pull_request.typesclosedを指定する
  3. 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!

設定値のポイントは以下になります。

  1. Pre Release作成時ではなくRelease作成時のみ実行したいため、on.release.types指定にreleasedを指定する

おわりに

今回、GitHubのリリース機能を使ったCI/CDの設定例をご紹介しました。
実際のプロダクトでは上記の設定に加えて、Release DrafterによるDraft Releaseの自動作成もCI/CDで実現しています。
これからCI/CDをGitHub Actionsで実装される方の参考になれば幸いです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1