Cloud BuildにRSpecを組み込んでCI/CDパイプラインを構築する

Cloud BuildにRSpecを組み込んでCI/CDパイプラインを構築する

Rails

RailsにRSpecを導入して、Cloud BuildでCI/CDパイプラインを構築するところまでをまとめています。

RailsにRSpecを導入する

まずはRailsにRSpecを導入します。

実際にローカル環境でRSpecによるテストができるところまでの手順をまとめています。

「rspec-rails」、「factory_bot_rails」、「rails-controller-testing」のインストール

Gemfileを以下の3つのGemを追加しbundle installします。

・Gemfile

RSpecに必要なファイルを生成する

以下のコマンドでRSpecに必要なファイルを生成します。

 

成功すると以下の3つのファイルが生成されていることが確認できます。

RSpec実行に必要な設定をする

Factory Botの設定をrails_helper.rbに追加します。

・spec/rails_helper.rb

 

Rails.loggerのログを出力するには以下を追加します。

 

rspec用のテストファイルを作成するために、application.rbに以下を追加します。

・application.rb

 

.rspecに以下を追加するとテストの実行結果が見やすくなります。

・.rspec

 

テストを作成する

factoriesやcontrollerを用意し、テストを作成していきます。

今回はテスト作成の過程は省略します。詳しくは以下の記事などを参考にしてください。

【Rails】APIテストの書き方 #RSpec - Qiita

概要Railsで作成されたAPIのテストについてこちらを参考に必要最低限の情報を…
qiita.com

例として本のデータを取得するAPIの本コントローラのshowメソッドに対してテストを行います。

・spec/factories/books.rb

 

・spec/controllers/books_controller_spec.rb

 

ローカルでテストが実行できるか確認します。

 

正常にテストが成功すると以下のようなログが出力されます。

 

Cloud BuildでRSpecを組み込む

ローカルでのRSpecによるテストが確認できたら、Cloud BuildにRSpecを組み込んでCI/CDパイプラインを構築していきます。

Dockerfileの作成

Rubyの公式イメージを元に作成しています。

テストする際のDBの接続先はMariaDBを使用します。

・Dockerfile

テスト用のDB設定

database.ymlに以下のようにテスト用のDBを設定します。

・database.yml

テスト実行用のシェルスクリプト作成

Cloud Buildで実行するシェルスクリプトを作成します。

MariaDBを起動して、DBを作成しテストを実行できる環境を整えます。その後、テストを実行します。

・rspec.sh

 

Dockerイメージを作成し、RSpecのテストを行いGAEにデプロイする

cloudbuild-staging.yamlのスクリプトでDockerイメージの作成、RSpecのテスト、GAEのステージング環境にデプロイを行います。いわゆるCI/CDパイプラインを構築して、実行しています。

Gitでプッシュするとcloudbuild.yamlのスクリプトが自動で実行されるようにしています。

Cloud BuildとGitの連携方法に関してはここでは省略しています。

・cloudbuild-staging.yaml

Cloud BuildでRSpecによる自動テストの動作確認

テスト失敗時

テスト失敗した際の挙動を確認します。

テストが失敗するとCloud Buildのステップが停止し、デプロイされることはありません。

 

テスト成功時

テスト成功時の挙動を確認します。

テストが成功すると、そのままGAEへのデプロイが始まり、無事完了しました。

参考

Rails5へのRspec導入から実行確認まで #Ruby - Qiita

株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。201…
qiita.com

Google Cloud BuildでRSpecのテストを行う #Rails - Qiita

先日、Google Cloud BuildとGithubの連携が発表され、CIの…
qiita.com