LoginSignup
0
0

RailsでGitHubActions(CI)を導入してみた

Last updated at Posted at 2024-06-16

GitHubActionsとは

GitHubによるCI/CD(継続的インテグレーションおよび継続的デリバリー)サービスです。
これを使うと、コードのビルド、テスト、デプロイなどを自動化できます。

導入メリット

新しくブランチを切って作業する時、rubocop と RSpec は通った状態でマージするのがいいですよね。
どちらも手動で実行するのですが、実行漏れがあってそのまま commit, push、PR作成まですると、
漏れに気づかずマージしてしまうと、エラー時に、どの段階でエラーが出たのか、わからなくなります。

CI を導入することで、これらの作業を自動で実行してくれて、問題があったら教えてくれる

こちらも参考にしてみてください。

できること

調べてみたら以下のことができるみたいです。

1.自動テスト
誰かが新しいコードを追加すると、すぐにそのコードが動くかどうか自動的に確認するテストが実行します。

2.コードチェック
新しいコードが読みやすいか、エラーがないかなどを自動的にチェックします。

3.通知
問題が見つかったら、チームのメンバーに自動的に通知を送ります。

注意

RailsでCIを導入する際に、参考にしてもらって構わないです。
ただ丸コピはおすすめしません。プロジェクトやアプリなどによって変わってくるので、
ご自身で考えて構築してください。

導入方法

1.github-action.ymlの作成

Railsのプロジェクト内に、.github/workflowsのディレクトを作成し、
その中にサービス名.ymlを作成します。自分の場合は、rails_netflix_appにしました。

GitHub Actionsを使ってRailsプロジェクトの継続的インテグレーション(CI)を設定するためのもので、
コードの変更がdevelopmentブランチにプッシュされたとき、またはそのブランチに対するPRが作成されたときに
トリガーされます。

.github/workflows/rails_netflix_app.yml
name: Rails CI

on:
  push:
    branches:
      - development
  pull_request:
    branches:
      - development

jobs:
  build:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:12
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: rails_netflix_app_test

    env:
      RAILS_ENV: test
    
    steps:
      - name: Git checkout
        uses: actions/checkout@v2

      - name: Setup Ruby 3.1.3
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.1.3

      - name: Setup bundler
        run: gem install bundler

      - name: Cache gems
        uses: actions/cache@v2
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gem-

      - name: Install gems
        run: bundle install --path vendor/bundle --jobs 4

      - name: Setup Database
        run: |
          cp -v config/database.yml.ci config/database.yml
          bundle exec rails db:create
          bundle exec rails db:schema:load
        env:
          RAILS_ENV: test
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres

      - name: Run tests
        run: bundle exec rspec
      - name: RuboCop
        run: bundle exec rubocop

1の解説

  • name: Rails CI
    ワークフローの名前で、GitHub Actionsのインターフェース上で表示。

  • on
    ワークフローのトリガー条件を定義。

  • push:

  • branches: developmentブランチにプッシュされたときにワークフローを実行。

  • pull_request:

  • branches: developmentブランチに対するプルリクエストが作成されたときにワークフローを実行。

  • jobs
    このセクションは、ワークフローの各ジョブを定義。ここではbuildというジョブを設定しています。

  • runs-on: ubuntu-latest
    このジョブが実行される環境を指定します。ubuntu-latestは最新のUbuntu環境を意味。

  • services
    このセクションでは、テスト用のサービス(データベースなど)を定義します。

  • postgres:
    PostgreSQLデータベースサービスを設定しています。

  • image:
    使用するPostgreSQLのDockerイメージ。

  • ports:
    コンテナのポート設定。

  • env:
    データベースの環境変数(ユーザー名、パスワード、データベース名)。

  • env
    全体のジョブに適用される環境変数を設定します。ここでは、Railsの環境をtestに設定しています。

  • steps
    このジョブで実行される具体的なステップを定義します。

  • Git checkout
    コードをチェックアウトします。

  • uses: actions/checkout@v2
    GitHub Actionsの公式アクションを使用。

  • Setup Ruby 3.1.3
    Rubyの設定をします。

  • uses: ruby/setup-ruby@v1
    Rubyのバージョンを3.1.3に設定します。

  • Setup bundler
    Bundlerをインストールします。

  • run: gem install bundler
    で実行されます。

  • Cache gems
    依存関係のインストールを高速化するため、gemをキャッシュします。

  • actions/cache@v2
    vendor/bundleディレクトリをキャッシュします。

  • Install gems
    依存関係(gem)をインストールします。

  • run: bundle install --path vendor/bundle --jobs 4

  • Setup Database
    データベースの設定を行います。
    congig/database.yml.ciファイルをconfig/database.ymlにコピーし、データベースを作成してスキーマをロードします。

  • Run tests
    テストを実行します。

  • run: bundle exec rspec
    RSpecのテストスイートを実行。

  • RuboCop
    コードスタイルのチェックを行います。

  • run: bundle exec rubocop
    RuboCopを実行。

2.config配下にdatabase.yml.ci作成

CIで使うテスト用のDBの設定ファイルを追加します。

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: localhost
  username: postgres
  password: postgres
  pool: 5

test:
  <<: *default
  database: rails_netflix_app_test_ci

これらをコミットし、GitHubにプッシュしプルリクエストを作成したら起動します。
自分の場合は、最初はdevelopmentブランチにpushし、masterブランチ反映前に起動しました。

成功、起動中、失敗の画面

動作中はこんな感じの画面です。

スクリーンショット 2024-06-15 3.35.08.png

こんな感じの画面になると成功です。

スクリーンショット 2024-06-15 3.12.23.png

失敗の画面はこんな感じです。
テストがうまくいかない時は、GitHub Actionsの実行欄に***赤い「×」***がつきます。
その際には、実行欄の横の「Details」をクリックすると、失敗したGitHub Actionsの内容を見れます。
特に自分はSetUpDataBaseのDB関連で苦戦しました。😅

スクリーンショット 2024-06-17 0.11.18.png

スクリーンショット 2024-06-17 0.11.31.png

引用  https://zenn.dev/ryouzi/articles/cd6857c08e60e7

RuboCopのエラーの対処

bundle exec rubocop -a

で対処しました。

credentialsを扱う場合

以下の記事を参考資料で記載されていたので載せておきます。

公式ドキュメント

参考資料

ChatGPT

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0