こんにちはかみむらです。前回は、GitHub ActionsでNowにデプロイする記事を書きました。
この記事でも言及しましたが、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.ymlとdevelop.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が実行されます。