概要
CircleCIでLaravelのMySQLを使ったテストを実行する - Qiita の CircleCI2.0バージョン対応です。
CircleCI2.0上でMySQLに繋いだLaravelのテストを実行します。
CircleCI上でマイグレートとシーディングを行い、
テストデータが入った状態でテストを実行できるようにします。
やることは
- Laravel側にCircleCI用のデータベース設定を追加
- circle.ymlにテスト用の設定を追加
の2つです。
Laravel側にCircleCI用のデータベース設定を追加
CircleCI2.0はDockerを使うのを前提に作られています。
今回はCircleCIが配布しているDockerイメージを使っていきます。
Dockerイメージの設定値は以下です。
設定項目 | 値 |
---|---|
host | 127.0.0.1 |
database | circle_test |
username | root |
password | 空文字 |
設定は以下のようになります。
'connections' => [
'circle_test' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'circle_test',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
]
]
.circleci/config.ymlにテスト用の設定を追加
CircleCI1系では設定ファイルはcircle.yml
だったのですが、.circleci/config.yml
に変わっています。
CircleCIにプロジェクトを作る時におすすめの設定が提示されるのですが、そこから幾つか変更し、最終的には以下のようになりました。
# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
build:
docker:
# specify the version you desire here
- image: circleci/php:7.2.1-apache-node-browsers
- image: circleci/mysql:5.7
# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
# - image: circleci/mysql:9.4
environment:
- APP_DEBUG: true
- APP_ENV: testing
- APP_KEY: APP_KEYを入れてください
- DB_CONNECTION: circle_test
- MYSQL_ALLOW_EMPTY_PASSWORD: true
working_directory: ~/repo
steps:
- checkout
# Install PHP Extension
- run: sudo docker-php-ext-install pdo_mysql
# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: composer install -n --prefer-dist
- save_cache:
paths:
- ./vendor
key: v1-dependencies-{{ checksum "composer.json" }}
# run seeding
- run: php artisan migrate
- run: php artisan db:seed
# run tests!
- run: php ./vendor/bin/phpunit
以下で変更点を説明してきます。
dockerイメージを指定する
docker:
# specify the version you desire here
- image: circleci/php:7.2.1-apache-node-browsers
- image: circleci/mysql:5.7
PHPのバージョンを上げたかったので、phpのdockerイメージを変更しました。また、mysqlを使いたかったので、mysqlのdockerイメージも追加で指定しました。
環境変数の指定
environment:
- APP_DEBUG: true
- APP_ENV: testing
- APP_KEY: APP_KEYを入れてください
- DB_CONNECTION: circle_test
- MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ALLOW_EMPTY_PASSWORD: true を指定しろとhttps://hub.docker.com/r/circleci/mysql/ で言われているので指定しています。
pdo_mysqlのインストール
# Install PHP Extension
- run: sudo docker-php-ext-install pdo_mysql
dbを使ったテストのためにpdo_mysqlを入れています。
マイグレーションとシーディング
# run seeding
- run: php artisan migrate
- run: php artisan db:seed
おまけ
# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: composer install -n --prefer-dist
- save_cache:
paths:
- ./vendor
key: v1-dependencies-{{ checksum "composer.json" }}
ここの部分はおすすめ設定のままなのですが、以前にcomposerでインストールしたデータを保存しておいて再利用するようになっています。便利