GitLab CI: Часть 6, этап build в .gitlab-ci.yml (второй подход)
Jun 1, 2017 08:29 · 948 words · 5 minute read
В предыдущей статье из цикла о настройке continuous integration в GitLab мы настроили первую работоспособную версию этапа сборки (build
) проекта, однако в ней было два проблемных момента, которые мы подробоно разберем и устраним в данной статье.
Итак, давайте разберемся с кешем и артефактами в GitLab CI!
Чтобы ускорить время сборки проекта, которое в первоначальной реализации составляет 7-8 минут, мы будем использовать кеш. Решить вторую проблему (файлы созданные на этапе сборки не передаются на следующий этап GitLab CI) нам помогут артефакты (artifacts).
Теперь этап сборки проекта с помощью GitLab CI в специальном файле .gitlab-ci.yml
будет выглядеть следующим образом:
...
compile:
stage: build
script:
- cp -u .env.develop .env
- docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "composer install"
- docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf routes compile"
- docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf cache clean-modified-content"
- docker-compose -f docker/docker-compose-build.yml run -T --rm node sh -c "npm install --production && grunt install-build --no-dev"
- docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf user-default-avatar"
cache:
key: ${CI_COMMIT_REF_NAME}
paths:
- node_modules/
- vendor/
artifacts:
paths:
- vendor/
- public/dsd/js/utils/routes.js
- bin/
- .env
- public/default_img/user/en/
- public/default_img/user/ru/
- public/dsd/css/style.css
- public/dsd/css/style.css.map
- public/dsd/mix/tmp-pages-bundle/
- public/dsd/js/bundles/
- public/dsd/js/templates.hbs.js
- public/dsd/js/templates.html.js
- public/dsl/css/
- public/dsl/js/bundles/
- public/dsm/css/ltr-style.css
- public/dsm/css/ltr-style.css.map
- public/dsm/css/rtl-style.css
- public/dsm/css/rtl-style.css.map
- public/dsm/js/main-build.js
- public/dsm/js/main-build.js.map
- public/vendor/
when: on_success
expire_in: 1h
only:
- develop
- docker
...
Действия, описанные в секции script
остаются точно такими же, как и в предыдущей статье, а вот о секциях cache
и artifacts
мы поговорим подробнее.
В секции cache
мы указываем раннеру кешировать содержимое каталогов node_modules
и vendor
, причем ключем кеша будет значение переменной CI_COMMIT_REF_NAME
— имя ветки, для которой выполняются инструкции GitLab CI. Так как процесс continuous integration у нас настроен только для двух веток (develop и docker), то и кеш у них будет разным.
В секции artifacts
мы указываем, что в случае успешного выполнения этапа сборки (build
) проекта, необходимо все перечисленные каталоги и файлы сохранить для передачи на следующие этапы continuous integration. Храниться перечисленные файлы будут 1 час, после чего будут автоматически удалены с целью экономии места.
Выполнение инструкций с внесенными изменениями теперь займет менее двух минут (01:53), а детали на вкладке pipelines при успешном завершении будут такими (вывод очень сокращен):
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...
HEAD is now at 635e14c14a Merge branch 'develop' into 'develop'
Checking out 635e14c1 as develop...
Skipping Git submodules setup
Checking cache for develop...
Successfully extracted cache
$ cp -u .env.develop .env
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "composer install"
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Package egeloen/http-adapter is abandoned, you should avoid using it. Use php-http/httplug instead.
Package sparkpost/php-sparkpost is abandoned, you should avoid using it. Use sparkpost/sparkpost instead.
Generating autoload files
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf routes compile"
Routes compiled and copied to public/dsd/js/utils/routes.js
Now run: sudo -u root ./zf cache clean-modified-content
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf cache clean-modified-content"
Unable to find: data/cache/cache_modified_content.php. Possible file already removed.
$ docker-compose -f docker/docker-compose-build.yml run -T --rm node sh -c "npm install --production && grunt install-build --no-dev"
Starting application
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):
...
>> Local Npm module "grunt-scss-lint" not found. Is it installed?
>> Local Npm module "grunt-svgzr" not found. Is it installed?
>> Local Npm module "grunt-tinypng" not found. Is it installed?
Running "clean:js" (clean) task
>> 0 paths cleaned.
Running "copy:js" (copy) task
Created 58 directories, copied 995 files
Running "sass:dsl" (sass) task
Running "sass:dsd" (sass) task
Running "sass:dsm" (sass) task
Asset Size Chunks Chunk Names
main.js 287 kB 2 [emitted] main
job.js 277 kB 8 [emitted] job
reviews.js 273 kB 9 [emitted] reviews
cpa-partners.js 271 kB 13 [emitted] cpa-partners
prices.js 274 kB 14 [emitted] prices
partner.js 293 kB 15 [emitted] partner
contact.js 269 kB 19 [emitted] contact
simple-page.js 267 kB 20 [emitted] simple-page
...
Running "handlebars:compile" (handlebars) task
>> 1 file created.
...
Running "dom_templates:compile" (dom_templates) task
File "./public/dsd/js/templates.html.js" created.
...
Asset Size Chunks Chunk Names
steps.js 8.98 kB 23 [emitted] steps
blog-list.js 123 kB 4 [emitted] blog-list
new-home.js 21.7 kB 5 [emitted] new-home
statistic.js 8.01 kB 15 [emitted] statistic
common.js 2.9 MB 46 [emitted] common
Done, without errors.
$ docker-compose -f docker/docker-compose-build.yml exec --user www-data -T workspace sh -c "./zf user-default-avatar"
Done!
Creating cache develop...
Created cache
Uploading artifacts...
vendor/: found 31919 matching files
public/dsd/js/utils/routes.js: found 1 matching files
bin/: found 13 matching files
.env: found 1 matching files
public/default_img/user/en/: found 261 matching files
public/default_img/user/ru/: found 331 matching files
public/dsd/css/style.css: found 1 matching files
public/dsd/css/style.css.map: found 1 matching files
public/dsd/mix/tmp-pages-bundle/: found 21 matching files
public/dsd/js/bundles/: found 48 matching files
public/dsd/js/templates.hbs.js: found 1 matching files
public/dsd/js/templates.html.js: found 1 matching files
public/dsl/css/: found 47 matching files
public/dsl/js/bundles/: found 47 matching files
public/dsm/css/ltr-style.css: found 1 matching files
public/dsm/css/ltr-style.css.map: found 1 matching files
public/dsm/css/rtl-style.css: found 1 matching files
public/dsm/css/rtl-style.css.map: found 1 matching files
public/dsm/js/main-build.js: found 1 matching files
public/dsm/js/main-build.js.map: found 1 matching files
public/vendor/: found 1146 matching files
Uploading artifacts to coordinator... ok id=2609 responseStatus=201 Created token=ERugScWJ
Build succeeded
Особое внимание стоит обратить на последние строки — именно здесь можем увидеть, что все артефакты успешно созданы, загружены и будут использоваться на дальнейших этапах GitLab CI. В следующей статье рассмотрим этап тестирования исходного кода, например с использованием инструмента для визуализации качества кода phpmetrics
.