如何在 gitlab.com 上的 PHP 项目的作业列表中启用代码覆盖率输出
How to enable code coverage output in job list for PHP project on gitlab.com
对于在 https://www.gitlab.com 托管的项目,我想在 CI 设置中设置代码覆盖率,以便它可以显示在作业列表中
我的配置如下所示:
.gitlab-ci.yml
image: php:7.1.1
cache:
paths:
- vendor/
before_script:
# Install git, the php image doesn't have installed
- apt-get update -yqq
- apt-get install git -yqq
# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install all project dependencies
- php composer.phar install
# Run our tests
test:
only:
- master
- develop
script:
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
作业成功,但显示错误消息
错误:没有可用的代码覆盖驱动程序
我更新了 setting for Test coverage parsing 并将正则表达式设置为
^\s*Lines:\s*\d+.\d+\%
PHP/PHPUnit 的示例。
当我运行命令
vendor/bin/phpunit --coverage-text --colors=never
在本地,我得到以下输出:
Code Coverage Report:
2017-06-21 14:52:55
Summary:
Classes: 100.00% (4/4)
Methods: 100.00% (14/14)
Lines: 100.00% (43/43)
\Rodacker\CartExample::Article
Methods: 100.00% ( 6/ 6) Lines: 100.00% ( 11/ 11)
\Rodacker\CartExample::ArticleLoader
Methods: 100.00% ( 2/ 2) Lines: 100.00% ( 21/ 21)
\Rodacker\CartExample::ArticleRepository
Methods: 100.00% ( 3/ 3) Lines: 100.00% ( 6/ 6)
\Rodacker\CartExample::Image
Methods: 100.00% ( 3/ 3) Lines: 100.00% ( 5/ 5)
问题是 docker 映像中缺少 Xdebug 安装。我无法使用 apt-get
安装正确的版本,所以我不得不在 before_script
部分添加一个 pecl install xdebug
调用:
image: php:7.1.1
cache:
paths:
- vendor/
before_script:
# Install git, the php image doesn't have installed
- apt-get update -yqq
- apt-get install git -yqq
# Install Xdebug
- pecl install xdebug
- docker-php-ext-enable xdebug
# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install all project dependencies
- php composer.phar install
# Run our tests
test:
only:
- master
script:
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
对于正在搜索 CI 运行 时 PHP 单位不输出覆盖率报告的原因的人,需要进行一些更改。
在我的例子中,PHP 7.3 CLI 版本和 phpunit 9.4.3 覆盖率报告在 运行 vendor/bin/phpunit --configuration phpunit.xml.dist --coverage-text --colors=never
时丢失,在日志文件中输出 Warning: xdebug.mode=coverage has to be set in php.ini
.
通过将具有 xdebug 属性 xdebug.mode=coverage
的 xdebug.ini 文件添加到 PHP conf.d 文件夹解决了这个问题。要查找 php.ini 文件所在的位置 运行 php -i |grep php\.ini
嗯,在我的例子中,我必须在我的覆盖正则表达式中添加一对括号(捕获组)。这是我的 .gitlab-ci.yml
文件的摘录:
phpunit:
image: php:8.0
stage: qa
before_script:
- pecl install xdebug
- docker-php-ext-enable xdebug
script: XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-text
coverage: /\s+Lines:\s+(\d+\.\d+%)/
我还建议将所有 PHPUnit 配置移动到 phpunit.xml
。
我使用 Docker 容器和 Gitlab CI。
我有一个典型的 PHPUnit 配置。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true">
<coverage processUncoveredFiles="true">
<include>
<directory>src</directory>
</include>
<report>
<clover outputFile="phpunit.coverage.xml"/>
</report>
</coverage>
<testsuites>
<testsuite name="My Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
部分配置用于测试。测试覆盖率需要 vendor/bin/phpunit --coverage-text --colors=never
和 coverage: '/^\s*Lines:\s*\d+.\d+\%/'
。
testing:
image: $CI_REGISTRY/my-images/ci-docker-compose:latest
stage: test
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker-compose -f docker-compose.yml up -d --build
- docker-compose exec -T my-php-container vendor/bin/phpunit --coverage-text --colors=never
coverage: '/^\s*Lines:\s*\d+.\d+\%/'
only:
- merge_requests
我的Docker文件(一部分)。
# some commands
RUN apk add --no-cache --virtual .build-deps autoconf file g++ gcc libc-dev pkgconf make \
&& pecl install pcov && docker-php-ext-enable pcov \
&& apk del .build-deps
# some commands
以下命令很重要:pecl install pcov && docker-php-ext-enable pcov
。他们安装包以实现快速测试覆盖。
在测试之前,您可以使用 xdebug
和 "xdebug.mode=coverage"
或在 Docker 容器中设置 DEBUG_MODE=coverage
。
对于在 https://www.gitlab.com 托管的项目,我想在 CI 设置中设置代码覆盖率,以便它可以显示在作业列表中
我的配置如下所示:
.gitlab-ci.yml
image: php:7.1.1
cache:
paths:
- vendor/
before_script:
# Install git, the php image doesn't have installed
- apt-get update -yqq
- apt-get install git -yqq
# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install all project dependencies
- php composer.phar install
# Run our tests
test:
only:
- master
- develop
script:
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
作业成功,但显示错误消息
错误:没有可用的代码覆盖驱动程序
我更新了 setting for Test coverage parsing 并将正则表达式设置为
^\s*Lines:\s*\d+.\d+\%
PHP/PHPUnit 的示例。
当我运行命令
vendor/bin/phpunit --coverage-text --colors=never
在本地,我得到以下输出:
Code Coverage Report:
2017-06-21 14:52:55
Summary:
Classes: 100.00% (4/4)
Methods: 100.00% (14/14)
Lines: 100.00% (43/43)
\Rodacker\CartExample::Article
Methods: 100.00% ( 6/ 6) Lines: 100.00% ( 11/ 11)
\Rodacker\CartExample::ArticleLoader
Methods: 100.00% ( 2/ 2) Lines: 100.00% ( 21/ 21)
\Rodacker\CartExample::ArticleRepository
Methods: 100.00% ( 3/ 3) Lines: 100.00% ( 6/ 6)
\Rodacker\CartExample::Image
Methods: 100.00% ( 3/ 3) Lines: 100.00% ( 5/ 5)
问题是 docker 映像中缺少 Xdebug 安装。我无法使用 apt-get
安装正确的版本,所以我不得不在 before_script
部分添加一个 pecl install xdebug
调用:
image: php:7.1.1
cache:
paths:
- vendor/
before_script:
# Install git, the php image doesn't have installed
- apt-get update -yqq
- apt-get install git -yqq
# Install Xdebug
- pecl install xdebug
- docker-php-ext-enable xdebug
# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install all project dependencies
- php composer.phar install
# Run our tests
test:
only:
- master
script:
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text --colors=never
对于正在搜索 CI 运行 时 PHP 单位不输出覆盖率报告的原因的人,需要进行一些更改。
在我的例子中,PHP 7.3 CLI 版本和 phpunit 9.4.3 覆盖率报告在 运行 vendor/bin/phpunit --configuration phpunit.xml.dist --coverage-text --colors=never
时丢失,在日志文件中输出 Warning: xdebug.mode=coverage has to be set in php.ini
.
通过将具有 xdebug 属性 xdebug.mode=coverage
的 xdebug.ini 文件添加到 PHP conf.d 文件夹解决了这个问题。要查找 php.ini 文件所在的位置 运行 php -i |grep php\.ini
嗯,在我的例子中,我必须在我的覆盖正则表达式中添加一对括号(捕获组)。这是我的 .gitlab-ci.yml
文件的摘录:
phpunit:
image: php:8.0
stage: qa
before_script:
- pecl install xdebug
- docker-php-ext-enable xdebug
script: XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-text
coverage: /\s+Lines:\s+(\d+\.\d+%)/
我还建议将所有 PHPUnit 配置移动到 phpunit.xml
。
我使用 Docker 容器和 Gitlab CI。
我有一个典型的 PHPUnit 配置。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true">
<coverage processUncoveredFiles="true">
<include>
<directory>src</directory>
</include>
<report>
<clover outputFile="phpunit.coverage.xml"/>
</report>
</coverage>
<testsuites>
<testsuite name="My Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
部分配置用于测试。测试覆盖率需要 vendor/bin/phpunit --coverage-text --colors=never
和 coverage: '/^\s*Lines:\s*\d+.\d+\%/'
。
testing:
image: $CI_REGISTRY/my-images/ci-docker-compose:latest
stage: test
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker-compose -f docker-compose.yml up -d --build
- docker-compose exec -T my-php-container vendor/bin/phpunit --coverage-text --colors=never
coverage: '/^\s*Lines:\s*\d+.\d+\%/'
only:
- merge_requests
我的Docker文件(一部分)。
# some commands
RUN apk add --no-cache --virtual .build-deps autoconf file g++ gcc libc-dev pkgconf make \
&& pecl install pcov && docker-php-ext-enable pcov \
&& apk del .build-deps
# some commands
以下命令很重要:pecl install pcov && docker-php-ext-enable pcov
。他们安装包以实现快速测试覆盖。
在测试之前,您可以使用 xdebug
和 "xdebug.mode=coverage"
或在 Docker 容器中设置 DEBUG_MODE=coverage
。