GitLab CI、PHPUnitのカバーレージを表示する
パッケージを公開するのであれば、複数のPHPバージョンでテストするとか、カバーレージを表示するとかが、信頼を得て利用者を増やすために、重要になります。
GitLab CIを使用し、複数のPHPバージョンでテストを実行する場合、エグゼキュータにより、方法は異なります。一般的には共有(Sheared)ランナーを利用することが多いでしょうが、実行環境が毎回クリーンですからDockerエグゼキュータが一般的に選ばれるでしょう。もちろん。gitlab.comの共有ランナーもDockerエグゼキュータです。
Dockerエグゼキュータの場合、テストしたいPHPバージョンを含んだイメージを選択するだけです。ジョブごとにimage
で指定します。
参照
カバレージの取得
カバレージを取るにはxdebug
PHP拡張を含んだイメージを利用する方法が簡単です。しかし、Xdebugを利用すると、PHPの実行が遅くなります。特にComposerで大量のパッケージを取得するLaravelの場合、速度的に耐え切れません。
そこで、PHP公式のイメージを利用し、PHPUnitを実行する直前にXdebugを有効にすると、多少はスピードが早くなります。
stages: - unittest PHPUnit単体テスト: stage: unittest image: php:7.0 cache: paths: - vendor before_script: - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - pecl install xdebug - apt-get update - apt-get install -y unzip script: - mv .env.example .env - rm composer.lock - composer install --prefer-dist --no-progress --ansi - php artisan key:generate - docker-php-ext-enable xdebug - vendor/bin/phpunit --coverage-text --colors=never
現在PHP7.1はまだRCのため、Xdebug拡張が用意されていませんでした。そこで、現行のPHP7.0を利用しています。
xdebugはpeclでインストールしています。
peclによるXdebugインストール後の設定時に圧縮ファイルの解凍が必要となり、unzipコマンドがzip PHP拡張が必要となります。今回は、unzipコマンドをインストールしました。
docker-php-ext-enableにより、PHPUnitの実行直前にXdebugを有効にしています。
カバーレージの結果をPipelines
のページから確認する場合、PHPUnitの--colors=never
は取り除いたほうが色分け表示され、見やすくなります。このオプションをつけているのは、GitLabでカバーレージ表示をするためです。
カバーレージの表示
カバーレージのパーセンテージをreadmeページ、もしくは外部ページで表示するには、まずCI/DI Pipelines
の設定ページに行きます。
ビルド結果として表示される出力から、パーセンテージを見つける正規表現を指定する、"Test coverage parsing"の項目を設定してください。
PHPUnitを使用する場合の正規表現は、^\s*Lines:\s*\d+.\d+\%
です。これはちゃんと下部に表示されていますので、コピペしましょう。
後はさらに下、"Build status"に指定されているコードをreadme.mdなり、外部ページのHTMLへ追加すれば、パーセンテージが表示されます。