Jenkins で PHPUnit 実行時に出力したカバレッジレポートを Jenkins 上で閲覧できるようにしているのですが、同じことを Gitlab CI でやるときのメモ。
Jenkins の場合
Jenkins なら HTML Publisher plugin でサクッと PHPUnit のカバレッジレポートを公開できます。
ビルドで↓のようにカバレッジレポートを HTML で出力して、
vendor/bin/phpunit --coverage-html=coverage/ # or phpdbg -qrr vendor/phpunit/phpunit/phpunit --coverage-html=coverage/
ビルド後のアクションで↓みたいに公開するディレクトリを指定すれば OK です。
// jenkins dsl job('test') { : publishers { publishHtml { report('coverage') { reportName('Coverage') reportFiles('index.html') } } } }
Gitlab CI の場合
Gitlab CI で同じことをやるときは PHPUnit で出力したカバレッジレポートを Gitlab Pages で公開すると良いらしいです、下記によると。
下記のようなビルド設定でカバレッジレポートを Gitlab Pages で公開できます。
# .gitlab-ci.yml before_script: - curl -fsSL https://getcomposer.org/download/1.4.2/composer.phar > composer.phar phpunit: stage: test image: php:alpine script: - php composer.phar install --prefer-dist --no-progress --ansi --dev - phpdbg -qrr vendor/phpunit/phpunit/phpunit --coverage-html coverage/ tags: - docker cache: paths: - vendor/ # coverage/ ディレクトリを artifact として保存する artifacts: paths: - coverage/ expire_in: 1 days # Gitlab Pages のためのジョブ(pages という名前でなければならない) pages: stage: deploy # phpunit ジョブの artifact を展開する dependencies: - phpunit # Pages で公開するファイルは public/ になければならない script: - mv coverage/ public/ # artifact を移動させるだけならこうしとけば git clone/fetch や checkout されない variables: GIT_STRATEGY: none # Pages で公開するには artifact にしなければならない artifacts: paths: - public/ expire_in: 1 days
Gitlab Pages のメモ
Gitlab Pages は要するに、pages
というジョブのビルドの結果、 public
というディレクトリが artifact として保存されれば、それが Gitlab Pages として公開される、です。GitHub Pages とはだいぶ感じが違います。
Gitlab Pages は最後にビルドされた結果しか公開されないので、ビルドごとのカバレッジレポートを閲覧したりはできなさそう。なのですべてのブランチでカバレッジレポートを保存するのではなく(Jenkins ではそうしてた)、master のときだけにしとくのが良さそう。トピックブランチのビルドで Gitlab Pages のカバレッジレポートが上書きされるのもどうかと思うので。
ただ、カバレッジレポートを artifact として保存しておけばダウンロードしてローカルで閲覧することはできるので、phpunit
ジョブの artifact はそのままで、pages
ジョブだけ特定ブランチに制限するのがよさそう。
ビルド履歴や成果物のメモ
artifact は有効期限を expire_in
で指定しなければ無期限となるっぽい。expire_in
を指定すると有効期限が切れると自動で削除されるが、ジョブの画面から Keep ボタンを押して有効期限をクリアする(無期限にする)こともできるっぽい。
成果物やビルドログはジョブの画面で Erase ボタンを押せば手動で消せる。artifact は上記の通り有効期限を付けて自動で消すこともできるけど、ビルドログは Erase ボタンで消さない限り消えなさそう。
Erase ボタンでもビルドログや成果物が消えるだけで、ビルドやパイプラインの履歴そのものは消せなさそう。一時的にパイプラインを無効→有効としても消えたりはしない。プロジェクトを削除すれば・・どうなるかは試していない。
Jenkins だとビルド履歴を世代数や日数で削除できるので、それができないことに違和感が無くもないけど、そもそもバージョン管理システムとはすべての履歴を残すためのものなんだから、ビルドの履歴が残るのもそういうものだと言われればそういうものな気もする。
強いて言えば試行錯誤した履歴まで残るのがちょっとかっこ悪い感じする。
アーティファクトのメモ
artifact、(この界隈では)日本語で成果物と訳されると思うけど、アーティファクトとカタカナで書くと、なんか、すごそう、すごい力を秘めてそうで違和感。