LoginSignup
25
19

More than 5 years have passed since last update.

CircleCi 2.0 で docker-compose を利用して環境の構築・テスト

Last updated at Posted at 2017-09-01

Friday I/O です。

株式会社ワムウでは、毎週金曜日は 興味がある事柄に取り組み、その成果を何らかの形でアウトプットする日 としております。

はじめに

弊社ではローカル開発環境の構築に Docker, Docker Compose を主に使用しています。

最近他社の開発者の方と共同で開発を行う仕事が増えてきたので、Github とCircleCi を連携させて自動テストするようにしています。こうすることでテストが通ったコードだけ master へマージすることができるようになり、コード品質の担保につながります。

これまでのCircleCIでのテスト

これまで 案件を進める流れで CircleCI を利用する場合、

  • ローカルでDocker開発環境構築
  • CircleCI マシンで疑似テスト環境構築

CircleCI のマシンでもまた環境構築するの? と二度手間でしたが、
CircleCI 2.0 からジョブにDockerが使えるようになりました。
環境構築はDocker にまかせてCI側でビルド・テストできると便利だよねーということでやりました。

アプリケーションの構成

項目 名称 バージョン
Language PHP 7.1
Framework Laravel 5.4
DB MySQL 5.7

こんな感じの構成でCircleCI上でビルド・テストします。
PHPと、MySQLは公式のDockerイメージを使用します。

結果

.circleci/config.yml の記述は以下のような記述で環境の構築・テストすることができました。簡単。

---

version: 2
jobs:
  build:
    machine: true
    steps:
      - checkout
      - run:
          name: Build Docker Image
          command: docker-compose build
      - run:
          name: Run tests
          command: |
            docker-compose run app-servie-name /bin/bash -c '\
              cp .env.example .env && \
              composer install --no-interaction && \
              php artisan key:generate && \
              ./artisan migrate:refresh && \
              ./vendor/bin/phpunit -c phpunit.circle.xml'

何をやっているかポイントとなる部分を説明をすると

  1. machine: true CircleCI のVMを指定しています。ここの指定でDockerのイメージを指定することも可能ですが、その場合 volume のマウントができないためCircleCI のVM内でDocker を立ち上げるようにしています。

  2. Run tests 内の記述について
    ここではテストをしたい、コマンドの返りが欲しいので
    docker-compose run {service-name} /bin/bash -c でコンテナを起動します。

    以降の処理はLaravelのお話で、アプリケーションのセットアップ、テストまでをずらっと書いてます。

  3. phpunit.circle.xml について
    Laravel に phpunit.xml が存在するのでコピーをして作成したものです。

    xml内では、docker-compose.yml で指定しているDB名と同じDB名を記述する必要があります。

    MySQL公式のDocker イメージが、起動時にDBが存在しない場合にMYSQL_DATABASE環境変数の値でDBを作成するので、作成されたDBをテストDBとして利用するようにしました。

以下にサンプルファイルを用意したので参考までに

問題点

上記のCircleCIの設定だとDockerイメージのビルドに時間がかかるので
CircleCIが提供するキャッシュ機能について来週書きます。

25
19
0

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
25
19