GitLab CI: Анализ кода

Aug 24, 2017 14:52 · 481 words · 3 minute read gitlab gitlab ci

Ранее в цикле статей о настройке процесса 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), так что стоит хорошо подумать нужно ли внедрять этот инструмент и как часто его стоит использовать.

tweet Share