LoginSignup
50
33

More than 5 years have passed since last update.

CircleCI2.0でMySQLを使ったLaravelのテストを実行する

Last updated at Posted at 2018-01-11

概要

CircleCIでLaravelのMySQLを使ったテストを実行する - Qiita の CircleCI2.0バージョン対応です。

CircleCI2.0上でMySQLに繋いだLaravelのテストを実行します。

CircleCI上でマイグレートとシーディングを行い、
テストデータが入った状態でテストを実行できるようにします。

やることは

  1. Laravel側にCircleCI用のデータベース設定を追加
  2. circle.ymlにテスト用の設定を追加

の2つです。

Laravel側にCircleCI用のデータベース設定を追加

CircleCI2.0はDockerを使うのを前提に作られています。
今回はCircleCIが配布しているDockerイメージを使っていきます。

Dockerイメージの設定値は以下です。

設定項目
host 127.0.0.1
database circle_test
username root
password 空文字

設定は以下のようになります。

config/database.php
    '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にプロジェクトを作る時におすすめの設定が提示されるのですが、そこから幾つか変更し、最終的には以下のようになりました。

.circleci/config.yml
# 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でインストールしたデータを保存しておいて再利用するようになっています。便利

50
33
1

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
50
33