Идея
Наш проект занимается тестированием сайта. Результаты тестов выкладываются как артефакт. Очень "удобно".Можно
1. Посмотреть содержимое папки

Тыкать на reports.html бесполезно, не откроется
2. Скачать артефакты в zip-архиве, распаковать, посмотреть.

Впечатляет? И меня.
...нет
Хотелось бы смотреть отчеты без дополнительных телодвижений.
И такой способ есть!
Gitlab Pages
Каждый проект может хостить статику по определенному адресу, нужно только по хитрому это описать в CI файле.Описательство этого механизма на сайте Гитлаб.
Степ бай степ.
Самый простой пример того, что нужно написать в .gitlab-ci.yml
Реализация
Простая и очевидная для того, кто вторую неделю страдает над гитлаб СиАй.Сохраняем результаты тестов как артефакт
Добавляем этап pages, в котором этот артефакт перевыкладываем.
Куски .gitlab-ci.yml
stages:- build
- pages
stage: pages
script:
- pwd
- mv Reports public
dependencies:
- build
artifacts:
expire_in: 1 week
paths:
- public
environment: DEV
only:
- master
when: always
Ключевые моменты
Отчеты нужны даже если все тесты попадали (тем более, если все тесты попадали), говоря терминами CI, "если предыдущий stage сфейлился", так что прописываемwhen: always
Второе
Артефакты с результатами запуска генерируются в предыдущем stage и нам нужно их передать "по цепочке". Для этого используется
dependencies:
- build
- build
Третье
Система отчетности рождает несколько папок (по кол-ву браузеров, в которых были запущены тесты) и не создаёт никакого index.html, что, в свою очередь приводит к тому, что Gitlab Pages ничего не показывают.
Как это выглядит:
Нужно самому сгенерить index.html и подсунуть его в артефакты.
Пришлось вспомнить немного шелла и awk:
Результат:
- find . -name report.html | awk 'BEGIN {print "<!DOCTYPE html>\n<html>\n<head></head>\n<body>"}{print "<a href=\"" $1 "\">Report "NR"</a><br>"} END {print "</body>\n</html>"}' > index.html
Продолжение следует...
Update 1
ОтветитьУдалитьЕсть одно очень странное ограничение для Pages - оно не работает для подгрупп. А ведь так логично, выделить тестировочные проекты в подгруппу.
Пруф: https://docs.gitlab.com/ee/user/group/subgroups/index.html#limitations