code-log

フロントエンドやサーバーレスの話題中心です

GitHub Actionsでブランチ毎にワークフローを分ける

こんにちはかみむらです。前回は、GitHub ActionsでNowにデプロイする記事を書きました。

code-log.hatenablog.com

この記事でも言及しましたが、NowのCLIにはpreview deploy(プレビュー用)とrelease deploy(リリース用)の2つがあります。実際にWEBサイトを運用する場合は、ブランチもしくはタグでデプロイを分けたほうが都合がいいです。

そこで、今回はGitHub Actionsでブランチ毎にワークフローを分けてみます。

ブランチ毎にワークフローを分ける

GitHub Actionsではワークフローを、複数書くことができます。なので、2つのワークフローを作成して、ファイル毎にブランチをフィルターします。GitHub Actionsのonは、ワークフローをトリガーするイベントの名前です。これを使えば、イベント毎にブランチをフィルタリングすることができます。例えば下記のように書きます。

on:
  # masterにプッシュすると起動する
  push:
    branches:
      - master
  # developにプルリクエストを送ると起動する
  pull_request:
    branches:
      - develop
  # 特定のブランチを無視する
  branches-ignore:
      - 'releases' 

ブランチは正規表現でもフィルタリングすることができます。

on:
  push:
    branches:    
      - 'releases/**-alpha'

今回はプロダクション環境と、開発環境に分けてワークフローを作成します。なので、production.ymldevelop.ymlの2つのファイルを作成してください。

production.yml develop.yml

プロダクション環境は、masterブランチにプルリクエストをマージしたときにCI/CDが起動します。ほとんどの開発現場で、masterブランチに直接プッシュすることはないですよね。

production.yml

name: production 

on: 
  pull_request:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install
      env:
        CI: true

そして開発環境では、developブランチにプッシュしたときにCI/CDが起動します。
develop.yml

name: develop

on:
  push:
    branches:
      - develop

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install
      env:
        CI: true

この設定ファイルをGitHubリポジトリにプッシュしてみましょう。すると、developブランチにプッシュしたときに、develop.ymlが実行されます。そして、masterブランチへのプルリクエストを作成して、マージするとproduction.ymlが実行されます。

最後に

今回はGitHub Actionsでブランチ毎にワークフローを分けてみました。実際の開発で使う場合は必須な設定ですよね。GitHub Actionsは、まだまだ情報が少ないと感じました。今後も小ネタがあったら、アウトプットしていきます。