おさとの雑記帳

日々の学習のアウトプットに使っていきます!

GitHub Actions でテストとデプロイを自動化してみた

こんにちは. おさとです💪

当エントリーではRailsプロダクトをGitHub Actionsによるテスト、デプロイの自動化をおこなっていきます.

やりたいこと

  • push時にテストを走らせる
  • mainにマージする時にテストを走らせる
    • GREENならデプロイ

背景

Railsで開発を進める中で、テストとデプロイの自動化によって開発効率が上がると思い、実装に至ります.

実装

GitHub リポジトリの Actions から Ruby on Rails を選択し、workflowを作成します.

commitしてみると、テストが走りましたが、エラーが出てしまいました.

ActionView::Template::Error:         ActionView::Template::Error: Webpacker can't find application.js

Webpackerがないとのことなので、作成したymlにwebpackerのインストールと、アセットのプリコンパイルを実行するようにします. また、今回はlinterは走らせないので、jobsからlintを削除します.

デプロイのコードはこちらを参考にします.

以下のようにymlファイルを編集します.

name: "Ruby on Rails CI"
on:
  push:
    branches:
      - main
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:11-alpine
        ports:
          - "5432:5432"
        env:
          POSTGRES_DB: rails_test
          POSTGRES_USER: rails
          POSTGRES_PASSWORD: password
    env:
      RAILS_ENV: test
      DATABASE_URL: "postgres://rails:password@localhost:5432/rails_test"
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Install Ruby and gems
        uses: ruby/setup-ruby@8f312efe1262fb463d906e9bf040319394c18d3e # v1.92
        with:
          bundler-cache: true
      - name: Install webpacker
        run: bin/rails webpacker:install && bin/rails assets:precompile
      - name: Set up database schema
        run: bin/rails db:schema:load
      - name: Run tests
        run: bin/rake

  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: akhileshns/heroku-deploy@v3.12.12 # This is the action
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: ${{secrets.HEROKU_APP_NAME}}
          heroku_email: ${{secrets.HEROKU_EMAIL}}

mainにpushされたらテストを実行してデプロイ、ですね.

pushする前にリポジトリのSettingsからsecretsを設定します.

設定し終えpushしてみると、無事デプロイできました 🎉

jobs.deployでneedsを設定したことでテストが正常に終わってからdeployされるようになりました.

まとめ

mainブランチにpushされるタイミングでテストを走らせ、デプロイまで自動化できました.

開発効率がぐんと向上しそうです 💪