Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 22058

CircleCIでdocker-composeを使用して自動テストしてみた

$
0
0

はじめに

今回は、CircleCi上でdocker-composeを使用して自動テストを導入してみました。CircleCi上ではRSpecのテストを行っています。ローカルのテスト環境用ocker-compose.ymlをそのまま使用しているので比較的簡単にCircleCiを導入できました。何かの参考になればと思い記事にしてみました。
尚、開発環境とテスト環境用の設定については以前記事にしているこちらを使用しています。
DockerでNginx+unicorn+rails+Mysqlの開発環境を作ってみた
Docker+Rails+HeadlessChromeでRSpecのSystem Testしてみた

参考にさせていただいた記事

docker-composeでRailsを開発しCircleCI 2.0でテストしてHerokuにdeployする

開発環境

Mac OS X 10.15.4

docker -v
Docker version 19.03.8, build afacb8b

docker-compose -v
docker-compose version 1.25.4, build 8d51620a

前提条件

CircleCiの登録等はすでに完了済みとして進めさせていただきます。
CircleCiでSet up projectするところまで進めてください。
Circleci公式

1.ファイル構成について

.(既存railsプロジェクト)
├──.circleci
|   └──config.yml
├── Dockerfile
├── docker-compose.yml
├── Dockerfile.test
├── dockertest
|   └──docker-compose.test.yml
├── Gemfile
├── Gemfile.lock
├── config
|   └──datebase.yml
|   └──unicorn.conf.rb
└── nginx
     ├──Dockerfile 
     └──nginx.conf

上記のようなファイル構成で進めます。CircleCiで無駄なイメージを使用しないように開発環境用とは別にテスト環境用の
dockercompose.test.yml(Rails+Mysql+selenium_chromeの3つのコンテナ)を用意してます。selenium_chromeはRSpecのjsテスト用です。

2.設定ファイル等

開発・テスト環境用の詳しい設定に関しては以前の記事を参考にしていただければと思います。テスト環境の各設定は下記のようになってます。

Dockerfile(rails用)
#既存のプロジェクトのrubyのバージョンを指定FROM ruby:2.6.3 RUN apt-get update &&\
    apt-get install-y--no-install-recommends\
    nodejs  \
    mariadb-client  \
    build-essential  \
&& apt-get clean \
&&rm-rf /var/lib/apt/lists/*WORKDIR /var/www/rails/myappWORKDIR /myprojectCOPY Gemfile /myproject/GemfileCOPY Gemfile.lock /myproject/Gemfile.lockRUN gem install bundler
RUN bundle installCOPY . /myproject
database.yml
※テスト環境用の設定を載せてます。default:&defaultadapter:mysql2encoding:utf8pool:5username:rootpassword:passwordtest:<<:*defaulthost:test-dbdatabase:docker_test
yml.docker-compose.test.yml
version:'3'services:web:build:context:../dockerfile:Dockerfile.testdepends_on:-test-db-selenium_chrometest-db:image:mysql:5.7command:mysqld --character-set-server=utf8 --collation-server=utf8_unicode_cienvironment:MYSQL_DATABASE:docker_testMYSQL_ROOT_PASSWORD:passwordMYSQL_USER:rootMYSQL_PASSWORD:passwordselenium_chrome:image:selenium/standalone-chrome-debuglogging:driver:none

3.CircleCiの設定

config.yml
version:2jobs:build:# docker-composeがインストール済みの仮想マシンをプルmachine:image:circleci/classic:edgesteps:-checkout-run:name:Dockerコンテナのビルドcommand:docker-compose -f dockertest/docker-compose.test.yml build-run:name:Dockerコンテナの起動command:docker-compose -f dockertest/docker-compose.test.yml up -d-run:name:db接続を待機command:sleep 10-run:name:データベースのセットアップcommand:docker-compose -f dockertest/docker-compose.test.yml exec web bundle exec rails db:migrate RAILS_ENV=test-run:name:Dockerコンテナの停止command:docker-compose -f dockertest/docker-compose.test.yml down

imageでdocker-composeをインストール済みの仮想マシン使用するようにしてます。macine: circleci/classic:edgeとすることで最新版のmacineを使用することができます。
Circleciのdocker-composeの設定
macineのバージョン情報
ただし、macineを使うと、今後有料になる可能性がある+CircleCi CLIを使用しできません。(ローカルで動作テストできない。)
動作に関してはdocker-composeを使用してテストまでの流れを記載します。
dbの接続する際にdbのセットアップができる前にmigrateしようとしてエラーが発生するので10秒程待機時間を持たせています。(dockerizeを使用する方法もあるようですがうまくできなかったので苦肉の策でで待機時間を設けています。)

終わりに

今回CircleCiの設定をしていてCircleCi CLIを使用できないのはかなりつらかったです。何度もgitにpushしていたので…

最後までお読みいただきありがとうございました!!!


Viewing all articles
Browse latest Browse all 22058

Trending Articles