こんにちは. おさとです💪
当エントリーでは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されるタイミングでテストを走らせ、デプロイまで自動化できました.
開発効率がぐんと向上しそうです 💪