Goalist Developers Blog

GitHub Actionsでのビルド/デプロイの自動化

どうも,エンジニアのナカノです.

今回は,GitHub Actionsによるフロントやバックのビルド/デプロイの自動化をお話致します.

実はGitHub Actionsの経験が無く,それで今回の自動化で使ってみることにしました.

目 次
  • 背景
  • 作り方
  • 所感



背景

今回は,未経験の技術を実際に試してみて,それで自動化が実現出来たらなという感じです.

CI/CDといえば,今まではGitLab CI/CDJenkinsCircleCIを使って構築していました.

今回の外部案件ではCircleCIを使おうかな(個人的にはCircleCIは好きなので...)と考えてました.

ただ,社内でGitHub Actionsが使われ始めており,それで気になって今回試してみました.



作り方

ここでは,フロントソースのビルド生成物をS3へアップロードする場合を考えます.

構成図は以下の通りです.至ってシンプルな図です.問題は中身の設定です.

f:id:r-nakano:20200930195423j:plain

公式資料や社内ソースを参考にし,ワークフローの設定をそれっぽく作りました.

以下は,フロントエンド用のGitHub Actionsのワークフローの設定です.

バックエンド向けのワークフローの設定についても,同様な設定で作りました.

docs.github.com


.github/workflows/sample.yaml

name: xxxxxxxx

on:
  push:
    branches:
      - master

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: set up node
        uses: actions/setup-node@v1
        with:
          node-version: xx.xx.xx

      - name: cache
        uses: actions/cache@v2
        with:
          path: ~/node_modules
          key: xxxxxxxx-${{ hashFiles('**/package.json') }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: xxxxxxxx-

      - name: build
        run: xxxxxxxx

      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_DEFAULT_REGION }}

      - name: deploy
        run: xxxxxxxx


この設定をベースで作り上げると,次の一連の処理を行うことが出来ます.

  1. Nodeに関するセットアップを行う

  2. もしあれば,node_modulesのリストアを行う

  3. フロントソースのビルドを実施する

  4. AWSクレデンシャルのセットアップを行う

  5. ビルド生成物のS3へのアップロードを行う

  6. node_modulesをキャッシュとして保存する



所感

CI/CDサービスとしては,使い易い印象を持ちました.小さいところから始めるには適してます.

実際,ワークフローの設定さえ作れば,Gitプロジェクトとの連携のセットアップ等は不要です.

ワークフローの中でActionsというものが使えます.CircleCIで言うとOrbsみたいなものですかね.

ただ,細かくカスタマイズしたり,D in Dの構成でやりたいならCircleCIの方が使い易そうです.

GitHub Actionsから始めて色々なCI/CDサービスを勉強するのは,かなりアリだと思います.