вторник, 27 марта 2018 г.

04 - Gitlab pages

Идея

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

Тыкать на reports.html бесполезно, не откроется

2. Скачать артефакты в zip-архиве, распаковать, посмотреть.


Впечатляет?  И меня.
...нет
Хотелось бы смотреть отчеты без дополнительных телодвижений.
И такой способ есть!

Gitlab Pages

Каждый проект может хостить статику по определенному адресу, нужно только по хитрому это описать в CI файле.
Описательство этого механизма на сайте Гитлаб.
Степ бай степ.
Самый простой пример того, что нужно написать в .gitlab-ci.yml

Реализация

Простая и очевидная для того, кто вторую неделю страдает над гитлаб СиАй.
Сохраняем результаты тестов как артефакт
Добавляем этап pages, в котором этот артефакт перевыкладываем.

Куски .gitlab-ci.yml

stages:
  - build
  - pages

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  

Третье
Система отчетности рождает несколько папок (по кол-ву браузеров, в которых были запущены тесты) и не создаёт никакого 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
Продолжение следует...

1 комментарий:

  1. Update 1
    Есть одно очень странное ограничение для Pages - оно не работает для подгрупп. А ведь так логично, выделить тестировочные проекты в подгруппу.
    Пруф: https://docs.gitlab.com/ee/user/group/subgroups/index.html#limitations

    ОтветитьУдалить