13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CircleCI + Bitbucket + Laravel(PHPUnit) で自動テスト

Last updated at Posted at 2017-04-14

環境

  • CircleCI 1.0
  • PHP 7.1
  • Laravel 5.4
  • MySQL 5.7

やりたいこと

Bitbucket の任意のリポジトリにプッシュがある度に PHPUnit を実行し、テスト結果を表示したい。
※今回は Bitbucket だが、GitHub でもやり方はほとんど同じと思われる。

方法

CircleCI を使う。

手順

CircleCI に登録し、Bitbucket と連携する

  1. CircleCI にアクセスし、Sign UP する
  2. Authorize Bitbucketを押下して、Bitbucket と連携する
  3. ビルドしたいリポジトリ(プロジェクト)を選択する

circle.yml を作成する

project-name/circle.yml
machine:
  environment:
    DB_HOST: 127.0.0.1
    DB_DATABASE: circle_test
    DB_SLAVE1: 127.0.0.1
    DB_SLAVE2: 127.0.0.1
    DB_USERNAME: ubuntu
    DB_PASSWORD:

  php:
    version: 7.1.0

database:
  override:
    - php artisan migrate --env=testing

test:
  override:
    - vendor/bin/phpunit -d memory_limit=512M

解説

environment:
  • 環境変数を設定し、元から.env(ここでは.env.testing)で設定している環境変数を上書く
    • こうすれば CircleCI でビルドされるときに、config/database.phpenvironment: の環境変数が適用され、コンテナ内(Localhost)のDBにアクセスされる
    • この対応をしないと php_network_getaddresses: getaddrinfo failed: Name or service not known などのエラーになり失敗する
    • DB名やユーザー名は CircleCI のデフォルト値
config/database.php
'mysql' => [
            'read' => [
                'host' => [
                    env('DB_SLAVE1', ''),
                    env('DB_SLAVE2', ''),
                ],
            ],
            'write' => [
                'host' => env('DB_HOST', ''),
            ],

            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', ''),
            'username' => env('DB_USERNAME', ''),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
        ],
database:
  • コンテナ内のDBにテーブルを作成するため、マイグレーションを実行している
test:
  • 重いテストではメモリ不足で落ちるため、memory_limit=512Mに上限を上げている

CircleCI を動かす

  1. circle.yml が作成できたら、リポジトリに追加するためにコミットしてプッシュする
  2. プッシュすると自動で CircleCI が動いてビルドされ、青色のRUNNING になる
  3. 正常にビルドされれば緑色の SUCCESS になる

ビルドが失敗する場合

Debug via SSH タブの Retry this build with SSH enabled を押下すると、CircleCI のコンテナに 30 分だけ SSH できるようになる。
この機能を利用してデバッグする。

おまけ

  • [ci skip] をコミットメッセージに入れると CircleCI のビルドをスキップできる。

  • 文言変更などの軽微な修正時に使えそう。

  • https://circleci.com/docs/1.0/skip-a-build/

  • 環境変数は CircleCI の画面(GUI)の Environment Variables からでも設定できる

  • circle.ymlと GUI の両方で設定した場合は、circle.ymlの方が反映されるもよう

13
12
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
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?