GitLab CI: Часть 7, этап test в .gitlab-ci.yml
Jun 8, 2017 08:30 · 801 words · 4 minute read
Продолжаем цикл статей о настройке процесса continuous integration в GitLab — теперь, благодаря использованию артефактов, мы можем передать на этап тестирования все файлы, созданные на этапе сборки проекта.
Давайте разберемся с этапом тестирования в GitLab CI на примере phpmetrics
— инструмента для визуализации качества кода!
В специальном файле .gitlab-ci.yml
, который находится в корне проекта, инструкции для этапа тестирования будут выглядеть следующим образом:
...
testing:
stage: test
dependencies:
- compile
script:
- docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./bin/phpmetrics \"./\" --exclude=\"node_modules|bin|log|temp|var|vendor|public|www|tests\" --report-html=./build"
artifacts:
paths:
- build/all.html
- build/complexity.html
- build/coupling.html
- build/css/
- build/images/
- build/index.html
- build/js/
- build/loc.html
- build/oop.html
- build/panel.html
- build/relations.html
- build/violations.html
when: on_success
expire_in: 1h
only:
- develop
- docker
...
Здесь уже много знакомых нам секций и ключевых слов, которые мы рассматривали ранее. Единственное, что мы еще не встречали — секция dependencies
(зависимости). В этой секции следует указывать с каких заданий брать артефакты (как раз в прошлой статье мы создавали артефакты для задания compile
из этапа build
).
Так как анализатор кода phpmetrics
в процессе выполнения также создает свои файлы, которые нужно передавать на следующие этапы GitLab CI, мы воспользуемся артефактами и здесь.
Самый первый запуск этапа тестирования прошел неудачно, eсли посмотреть подробности, то причину найти легко:
Running with gitlab-ci-multi-runner 1.10.0 (4a71a97)
Using Docker executor with image registry.gitlab.lc:5000/develop/ed:tmaier-dc-ssh ...
Starting service registry.gitlab.lc/develop/ed:my-docker-dind ...
Using locally found image version due to if-not-present pull policy
Waiting for services to be up and running...
Using locally found image version due to if-not-present pull policy
Running on runner-9e68759f-project-8-concurrent-0 via c7662d5025ba...
Fetching changes...
Removing .env
Removing .happypack/
Removing bin/
Removing node_modules/
Removing public/default_img/user/en/
Removing public/default_img/user/ru/
Removing public/dsd/css/style.css
Removing public/dsd/css/style.css.map
Removing public/dsd/js/bundles/
Removing public/dsd/js/templates.hbs.js
Removing public/dsd/js/templates.html.js
Removing public/dsd/js/utils/routes.js
Removing public/dsd/mix/tmp-pages-bundle/
Removing public/dsl/css/
Removing public/dsl/js/bundles/
Removing public/dsm/css/ltr-style.css
Removing public/dsm/css/ltr-style.css.map
Removing public/dsm/css/rtl-style.css
Removing public/dsm/css/rtl-style.css.map
Removing public/dsm/js/main-build.js
Removing public/dsm/js/main-build.js.map
Removing public/vendor/
Removing vendor/
HEAD is now at c48c8ebbba Update .gitlab-ci.yml
From http://gitlab.lc:10087/develop/ed
* [new branch] cherry-pick-0b7d95a9 -> origin/cherry-pick-0b7d95a9
Checking out c48c8ebb as docker...
Skipping Git submodules setup
Downloading artifacts for compile (1665)...
Downloading artifacts from coordinator... ok id=1665 responseStatus=200 OK token=vYmjzKY8
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./bin/phpmetrics \"./\" --exclude=\"node_modules|bin|log|temp|var|vendor|public|www|tests\" --report-html=./build"
sh: 1: ./bin/phpmetrics: not found
ERROR: Build failed: exit code 1
После того, как причина была устранена, этап тестирования выполнился успешно, а подробности выполнения выглядели так:
Running with gitlab-ci-multi-runner 1.10.0 (4a71a97)
Using Docker executor with image registry.gitlab.lc:5000/develop/ed:tmaier-dc-ssh ...
Starting service registry.gitlab.lc/develop/ed:my-docker-dind ...
Using locally found image version due to if-not-present pull policy
Waiting for services to be up and running...
Using locally found image version due to if-not-present pull policy
Running on runner-9e68759f-project-8-concurrent-0 via c7662d5025ba...
Fetching changes...
Removing .env
Removing .happypack/
Removing bin/
Removing node_modules/
Removing public/default_img/user/en/
Removing public/default_img/user/ru/
Removing public/dsd/css/style.css
Removing public/dsd/css/style.css.map
Removing public/dsd/js/bundles/
Removing public/dsd/js/templates.hbs.js
Removing public/dsd/js/templates.html.js
Removing public/dsd/js/utils/routes.js
Removing public/dsd/mix/tmp-pages-bundle/
Removing public/dsl/css/
Removing public/dsl/js/bundles/
Removing public/dsm/css/ltr-style.css
Removing public/dsm/css/ltr-style.css.map
Removing public/dsm/css/rtl-style.css
Removing public/dsm/css/rtl-style.css.map
Removing public/dsm/js/main-build.js
Removing public/dsm/js/main-build.js.map
Removing public/vendor/
Removing vendor/
HEAD is now at 635e14c14a Merge branch 'develop' into 'develop'
Checking out 635e14c1 as develop...
Skipping Git submodules setup
Downloading artifacts for compile (2609)...
Downloading artifacts from coordinator... ok id=2609 responseStatus=200 OK token=ERugScWJ
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./bin/phpmetrics \"./\" --exclude=\"node_modules|bin|log|temp|var|vendor|public|www|tests\" --report-html=./build"
0/2634 [>---------------------------] 0% < 1 sec
263/2634 [==>-------------------------] 9% 9 secs
526/2634 [=====>----------------------] 19% 9 secs
789/2634 [========>-------------------] 29% 14 secs
1052/2634 [===========>----------------] 39% 22 secs
1315/2634 [=============>--------------] 49% 26 secs
1578/2634 [================>-----------] 59% 34 secs
1841/2634 [===================>--------] 69% 38 secs
2104/2634 [======================>-----] 79% 43 secs
2367/2634 [=========================>--] 89% 49 secs
2630/2634 [===========================>] 99% 56 secs
2634/2634 [============================] 100% 56 secsLOC
Lines of code 147800
Logical lines of code 90246
Comment lines of code 57645
Average volume 430.79
Average comment weight 32.05
Average intelligent content 32.05
Logical lines of code by class 52
Logical lines of code by method 13
Object oriented programming
Classes 1751
Interface 361
Methods 7194
Methods by class 4.11
Lack of cohesion of methods 1.27
Average afferent coupling 2.6
Average efferent coupling 4.7
Average instability 0.69
Complexity
Average Cyclomatic complexity by class 3.34
Average Relative system complexity 230.73
Average Difficulty 4.91
Bugs
Average bugs by class 0.14
Average defects by class (Kan) 0.4
Violations
Critical 0
Error 65
Warning 207
Information 124
HTML report generated in "./build" directory
Done
Uploading artifacts...
build/all.html: found 1 matching files
build/complexity.html: found 1 matching files
build/coupling.html: found 1 matching files
build/css/: found 4 matching files
build/images/: found 3 matching files
build/index.html: found 1 matching files
build/js/: found 7 matching files
build/loc.html: found 1 matching files
build/oop.html: found 1 matching files
build/panel.html: found 1 matching files
build/relations.html: found 1 matching files
build/violations.html: found 1 matching files
Uploading artifacts to coordinator... ok id=2610 responseStatus=201 Created token=uv5PAJbp
Build succeeded
Данный этап занял чуть больше минуты (01:14). После успешного тестирования кода самое время приступить к сборке образа для деплоя — этим мы и займемся в следующей статье.