GitLab CI: Анализ кода
Aug 24, 2017 14:52 · 481 words · 3 minute read
Ранее в цикле статей о настройке процесса continuous integration в GitLab мы рассматривали этап тестирования на примере phpmetrics
— инструмента для визуализации качества кода.
В данной статье предлагаю усложнить этап тестирования и добавить в него еще несколько анализаторов кода. Давайте разберемся!
В специальном файле .gitlab-ci.yml
, который находится в корне проекта, можно заменить предложенные ранее инструкции для этапа тестирования, на следующие:
...
testing:
stage: test
dependencies:
- compile
script:
- docker-compose -f docker/docker-compose-build.yml run -T --rm phpqa --analyzedDirs=/var/www/html/ --buildDir=/var/www/html/build --ignoredDirs=node_modules,bin,data/logs,data/mail,data/migrations,data/dictionaries,vendor,build,tests,public --report
artifacts:
paths:
- build/checkstyle.xml
- build/pdepend-dependencies.xml
- build/pdepend-jdepend.svg
- build/pdepend-jdepend.xml
- build/pdepend-pyramid.svg
- build/pdepend-summary.xml
- build/pdepend.html
- build/phpcpd.html
- build/phpcpd.xml
- build/phpcs.html
- build/phploc.html
- build/phploc.xml
- build/phpmd.html
- build/phpmetrics.xml
- build/phpmetrics/
- build/phpqa.html
when: on_success
expire_in: 1h
only:
- develop
...
Как видим, новых секций и ключевых слов не добавилось, все это нам уже известно и не должно вызывать вопросов.
Кроме этого в файл docker/docker-compose-build.yml
необходимо добавить описание нового контейнера:
...
### Test Utilities Container (phpqa) ########################
phpqa:
container_name: phpqa
image: registry.gitlab.lc:5000/develop/ed/phpqa-ed-sq:latest
volumes_from:
- php-fpm
...
Можно использовать самосборный docker-образ, хранящийся в локальном docker registry (как в моем случае) или взять готовый образ отсюда.
Подробности выполнения «нового» этапа тестирования выглядят так:
$ docker-compose -f docker/docker-compose-build.yml run -T --rm phpqa --analyzedDirs=/var/www/html/ --buildDir=/var/www/html/build --ignoredDirs=node_modules,bin,data/logs,vendor,build,tests,public --report
Starting application
[FileSystem\CleanDir] Cleaned /var/www/html/build
[FileSystem\FilesystemStack] mkdir ["\/var\/www\/html\/build"]
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpmetrics --exclude="node_modules,bin,data/logs,vendor,build,tests,public" --extensions=php --report-html="/var/www/html/build/phpmetrics/" --report-violations="/var/www/html/build/phpmetrics.xml" "/var/www/html/"
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/phploc --progress --exclude=node_modules --exclude=bin --exclude=data/logs --exclude=vendor --exclude=build --exclude=tests --exclude=public "/var/www/html/" --log-xml "/var/www/html/build/phploc.xml"
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpcs -p --extensions=php --standard=PSR2 --ignore=*/node_modules/*,*/bin/*,*/data/logs/*,*/vendor/*,*/build/*,*/tests/*,*/public/* "/var/www/html/" --report-checkstyle="/var/www/html/build/checkstyle.xml"
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpmd "/var/www/html/" xml "/composer/vendor/edgedesign/phpqa/app/phpmd.xml" --suffixes php --exclude /node_modules/,/bin/,/data/logs/,/vendor/,/build/,/tests/,/public/ --reportfile "/var/www/html/build/phpmd.xml"
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/pdepend --jdepend-xml="/var/www/html/build/pdepend-jdepend.xml" --summary-xml="/var/www/html/build/pdepend-summary.xml" --dependency-xml="/var/www/html/build/pdepend-dependencies.xml" --jdepend-chart="/var/www/html/build/pdepend-jdepend.svg" --overview-pyramid="/var/www/html/build/pdepend-pyramid.svg" --ignore=/node_modules/,/bin/,/data/logs/,/vendor/,/build/,/tests/,/public/ "/var/www/html/"
[Edge\QA\Task\ParallelExec] /composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpcpd --progress --exclude=node_modules --exclude=bin --exclude=data/logs --exclude=vendor --exclude=build --exclude=tests --exclude=public "/var/www/html/" --min-lines 5 --min-tokens 70 --log-pmd "/var/www/html/build/phpcpd.xml"
0/6 [>---------------------------] 0% 0/6 [>---------------------------] 0%
1/6 [====>-----------------------] 16%
2/6 [=========>------------------] 33%
3/6 [==============>-------------] 50%
4/6 [==================>---------] 66%
5/6 [=======================>----] 83%
6/6 [============================] 100%
[Edge\QA\Task\ParallelExec] '/composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpcs -p --extensions=php --standard=PSR2 --ignore=*/node_modules/*,*/bin/*,*/data/logs/*,*/vendor/*,*/build/*,*/tests/*,*/public/* "/var/www/html/" --report-checkstyle="/var/www/html/build/checkstyle.xml"' exited with code 1
[Edge\QA\Task\ParallelExec] '/composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpmd "/var/www/html/" xml "/composer/vendor/edgedesign/phpqa/app/phpmd.xml" --suffixes php --exclude /node_modules/,/bin/,/data/logs/,/vendor/,/build/,/tests/,/public/ --reportfile "/var/www/html/build/phpmd.xml"' exited with code 2
[Edge\QA\Task\ParallelExec] '/composer/vendor/edgedesign/phpqa/../../../vendor/bin/phpcpd --progress --exclude=node_modules --exclude=bin --exclude=data/logs --exclude=vendor --exclude=build --exclude=tests --exclude=public "/var/www/html/" --min-lines 5 --min-tokens 70 --log-pmd "/var/www/html/build/phpcpd.xml"' exited with code 1
[Edge\QA\Task\ParallelExec] Exit code 2 Time 432.261s
[phpqa]
+------------+----------------+--------------+--------+-------------------------------------------+
| Tool | Allowed Errors | Errors count | Is OK? | HTML report |
+------------+----------------+--------------+--------+-------------------------------------------+
| phpmetrics | | | ✓ | /var/www/html/build/phpmetrics/index.html |
| phploc | | | ✓ | /var/www/html/build/phploc.html |
| phpcs | | 6897 | ✓ | /var/www/html/build/phpcs.html |
| phpmd | | 1272 | ✓ | /var/www/html/build/phpmd.html |
| pdepend | | | ✓ | /var/www/html/build/pdepend.html |
| phpcpd | | 72 | ✓ | /var/www/html/build/phpcpd.html |
+------------+----------------+--------------+--------+-------------------------------------------+
| phpqa | | 8241 | ✓ | /var/www/html/build/phpqa.html |
+------------+----------------+--------------+--------+-------------------------------------------+
[phpqa] No failed tools
Конечно, этот вариант анализа кода занимает куда больше времени, чем первоначальный из этой статьи (примерно 7,5 минут против 1,5), так что стоит хорошо подумать нужно ли внедрять этот инструмент и как часто его стоит использовать.