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のテストについてこちらを参考に必要最低限の情報をまとめました。 実際にこちらの記事で作成した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へのデプロイが始まり、無事完了しました。

参考

2017年10月にFactory GirlからFactory Botに名前変更になったり、rails-controller-testingが必要になったりとした…
qiita.com

先日、Google Cloud BuildとGithubの連携が発表され、CIの実現がより簡単になりました。 この記事では、簡単なRailsアプリケーションを用…
qiita.com