Closed4

GitHub ActionsでRuby on Railsのテストを実行する(CIの構築) 2020-12版

ピン留めされたアイテム
Masaki MuranoMasaki Murano

はじめに

今まではCircleCIかWerckerを使っていたけど、GitHub Actionsが安定してきているようなので使い始めてみることにした。
CircleCIのWeb UIもそれほど使いやすいとは思ってなかったのも理由の1つ。

Masaki MuranoMasaki Murano

テンプレートを使ってみる

こちらの記事を参考に、GitHubのテンプレートでやってみる
https://zenn.dev/dodonki1223/articles/b26d3689bbb012d9e88c

GitHubのWebから全てできるので10分程度で完了。

設定内容としては、

  1. GitHubのコードをチェックアウト
  2. Ruby をセットアップ
  3. Rspecを実行

実行すると、DBへの接続エラーとなる。このGitHubのテンプレートはRubyを実行する設定だけなのでRailsに必要なDBなどの設定などがないため。

Masaki MuranoMasaki Murano

RailsのRspecを実行するための設定を作る

GitHub Actions公式のドキュメント を見ると、CircleCIが分かっていれば比較的分かりやすい

このあたりの2次情報を見て、イメージを補足
https://qiita.com/tk_hamaguchi/items/50c819094125b5615912
https://qiita.com/DaichiSaito/items/f0a79f3eac04f1034a30

以下の方向性で設定ファイルを作成

  • DB, Cacheサーバーはservices(Dockerコンテナ)で構築
  • メインの実行環境もDockerコンテナで Rubyイメージを使う
    • GitHub ActionsのRuby Setupは長期的なサポートとActionsのセキュリティに懸念があるので使わない
  • npm, gem をキャッシュする

作成した設定ファイル

.github/workflows/test.yml
name: Test
on: [push]
jobs:
  run:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:10
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
        env:
          POSTGRES_HOST_AUTH_METHOD: 'trust'
      redis:
        image: redis:alpine
        options: --health-cmd "redis-cli -h localhost ping" --health-interval 10s --health-timeout 5s --health-retries 15
    container:
      image: ruby:2.6.2
      env:
        RAILS_ENV: test
        DATABASE_HOST: postgres
        REDIS_URL: redis://redis:6379/1

    steps:
      - uses: actions/checkout@v2
      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # npm キャッシュファイルは Linux/macOS の「~/.npm」に保存される
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Cache bundle gems
        uses: actions/cache@v2
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gem-${{ env.cache-name }}-
            ${{ runner.os }}-gem-
            ${{ runner.os }}-
      - name: Install Node.js and Yarn
        run: |
          # https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions
          curl -sL https://deb.nodesource.com/setup_12.x | bash -
          apt-get install -y nodejs
          # https://classic.yarnpkg.com/en/docs/install#debian-stable
          curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
          echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
          apt update && apt install yarn
      - name: Install Bundler
        run: gem install bundler --no-document -v $(grep "BUNDLED WITH" -1 Gemfile.lock | tail -n 1)
      - name: Bundle install
        run: bundle install --path=vendor/bundle --jobs 4 --retry 3
      - name: Yarn install
        run: bundle exec rails yarn:install
      - name: DB setup
        run: bundle exec rails db:setup
      - name: Run rspec
        run: bundle exec rspec
このスクラップは2020/12/17にクローズされました