GitLab CI、PHPUnitのカバーレージを表示する

Tags : GitLab   CI   PHP  

パッケージを公開するのであれば、複数の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へ追加すれば、パーセンテージが表示されます。