自前で運用しているGitLab CE(Community Edition)で、Pipelineを利用して
LaravelアプリケーションのPHP Unitを自動で回す設定を作成した時のメモ
PHP Unit設定
PHP Unitを実行した際に、カバレッジのデータがHTMLとして出力されるように、以下の設定を行う
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
... 省略
+ <logging>
+ <log type="coverage-clover" target="public/coverage/logs/clover.xml"/>
+ <log type="coverage-html" target="public/coverage"/>
+ </logging>
</phpunit>
GitLab CI設定
Gitリポジトリのルート配下に.gitlab-ci.yml
を作成する。
.gitlab-ci.yml
# composerによって生成されるvendor配下をキャッシュする
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- vendor/
# Build and Test
php-7.2: &build
image: php:7.2-cli-alpine
variables:
COMPOSER_VERSION: 1.8.6
script:
# 必要なライブラリをインストール
- apk add git autoconf build-base
- pecl install xdebug
- docker-php-ext-install mysqli pdo pdo_mysql
- docker-php-ext-enable xdebug
- curl https://getcomposer.org/download/${COMPOSER_VERSION}/composer.phar > composer.phar
- php composer.phar install
# .envの作成
- cp .env.example .env
# ユニットテストの実行
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
artifacts:
paths:
# 生成したカバレッジレポートを、次のjobで利用する
- public/coverage
# 異なるPHPのバージョンを指定してジョブを回したい場合、
# 以下のように`build`アンカーを呼び出したうえで、別のalpineのimageを指定すればOK
php-7.1:
<<: *build
image: php:7.1-cli-alpine
# 以下のようにすれば、composerのバージョンを指定できる
variables:
COMPOSER_VERSION: 1.6.5
# Unitテストのカバレッジを、Gitlab Pagesにホスティングする
pages:
stage: deploy
extends: php-7.2
artifacts:
paths:
- public
only:
- develop
これで、GitLabのリモートリポジトリにgit pushすると自動でテストが走る。
以下のURLにアクセスすると、HTML出力したユニットテストのカバレッジが確認できる。
http://{GitLabドメイン}/{プロジェクト名}/coverage/