У меня есть такой проект Gitlab (.gitlab-ci.yml):
# Sub-jobs listed as comments
stages:
- check-in-tests
# shellcheck
# pylint
# unit-tests
- several-other-things
# foo
# bar
# baz
- release
# release
# Run some shell code static tests and generate logs/badges
shellcheck:
stage: check-in-tests
script:
- bash run_shellcheck.sh
artifacts:
paths:
- logs/shellcheck.log
- logs/shellcheck.svg
# Run some python code static tests and generate logs/badges
pylint:
stage: check-in-tests
script:
- bash run_pylint.sh
artifacts:
paths:
- logs/pylint.log
- logs/pylint.svg
# <snip>
На странице моего проекта я хотел бы отобразить файлы .svg, созданные во время проверочных тестов, как значки.
Для инструмента значков Gitlab требуется URL-адрес файла изображения. Он не может загружать изображения с URL-адресов со строками запроса. К сожалению, синтаксис для доступа к конкретным артефактам задания заканчивается строкой запроса. Это фактически означает, что мы не можем ссылаться на артефакты вакансий в качестве значков.
Самый популярный обходной путь - использовать функцию Gitlab страницы для хранения артефактов в виде статического содержимого. Оттуда мы можем получить чистые URL-адреса наших артефактов, которые не содержат строк запроса.
Мое замешательство связано с механизмом, лежащим в основе задания "страниц", определенным в .gitlab-ci.yml. официальная документация здесь очень разреженный. Существуют миллион примеров для развертывания реальной веб-страницы с различными фреймворками, но меня не интересует ни одна из них, поскольку я просто использую «страницу» своего проекта для хостинга файлов.
Предполагается, что я хочу развернуть свою страницу в конце конвейера. Однако я хочу загрузить артефакты shellcheck и pylint рядом с начало конвейера. Более того, я хочу, чтобы эти артефакты выгружались даже в случае сбоя этапов конвейера.
Синтаксически задание страниц выглядит идентично любому другому заданию. Там нет ничего, что могло бы описать, как это волшебным образом подхватили внутренности Gitlab. Это оставляет мне следующие вопросы:
Магия страниц GitLab заключается в названии работы. Он должен называться «страницы» и ничего больше. Есть возможность переносить задание на разные этапы. Как только задание «страницы» завершается успешно, появляется особый тип задания, который называется «страницы: развертывание». Это задание отображается на этапе развертывания, даже если вы измените этап, на котором выполняется задание «страниц».
Если у вас есть задание страниц на ранней стадии, задания на более поздних этапах могут завершиться ошибкой, но задание «pages: deploy» все равно будет выполняться и обновлять страницы GitLab.
В остальном работа "страницы" ничем не отличается от обычной работы в GitLab. Если вам нужны артефакты из других заданий, вы можете получить их, используя артефакты и зависимости:
https://docs.gitlab.com/ee/ci/yaml/#dependencies
Задание «Pages» должно создать папку с именем «public» и предоставить эту папку как артефакт.