Введение
Сборки Jenkins становятся гораздо информативнее, когда они публикуют результаты своей работы. Отчеты о тестировании показывают, какие тесты были пройдены, а какие завершились с ошибкой, а уведомления помогают команде оперативно реагировать на сборки, требующие внимания.
В этой лабораторной работе вы используете панель управления Jenkins для создания проекта типа Freestyle, генерации небольшого отчета JUnit XML, его публикации в качестве отчета о тестировании Jenkins, настройки получателя уведомлений по электронной почте и запуска повторной сборки с одним неудачным тестом.
Создание задания, генерирующего JUnit XML
На этом этапе вы создадите проект Jenkins Freestyle, который записывает файл JUnit XML. JUnit XML — это распространенный формат отчетов, который Jenkins может считывать, даже если данные тестов поступают из простого shell-скрипта.
Откройте интерфейс рабочего стола. Firefox автоматически откроет Jenkins. Если этого не произошло, перейдите по адресу http://localhost:8080.
На панели управления Jenkins:
Нажмите New Item, введите test-report-demo, выберите Freestyle project и нажмите OK.
На странице конфигурации прокрутите вниз до раздела Build Steps, нажмите Add build step и выберите Execute shell.
Введите следующий shell-скрипт в поле Command:
mkdir -p reports
printf '%s\n' \
'<testsuite name="LabExSuite" tests="2" failures="0" skipped="0">' \
' <testcase classname="demo.HealthTest" name="test_home_page"/>' \
' <testcase classname="demo.HealthTest" name="test_api_status"/>' \
'</testsuite>' > reports/junit.xml
echo "Generated passing JUnit report"
Нажмите Save.
После сохранения откроется страница задания.

Выполните следующую команду в терминале, чтобы зафиксировать сохраненный шаг shell:
docker exec jenkins sh -lc "grep -n -E 'reports/junit.xml|Generated passing JUnit report' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/test-report-job-config.txt
Публикация отчета о результатах тестирования JUnit
На этом этапе вы добавите действие после сборки (post-build action), которое публикует файл JUnit XML. Шаг сборки создает файлы во время процесса, а действие после сборки обрабатывает их после завершения сборки.
На странице задания test-report-demo нажмите Configure.
Прокрутите вниз до раздела Post-build Actions, нажмите Add post-build action и выберите Publish JUnit test result report.
В поле Test report XMLs введите:
reports/junit.xml
Нажмите Save.

Выполните следующую команду, чтобы зафиксировать сохраненные настройки публикатора JUnit:
docker exec jenkins sh -lc "grep -n -E 'JUnitResultArchiver|<testResults>reports/junit.xml</testResults>' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/junit-publisher-lines.txt
Вывод должен содержать как JUnitResultArchiver, так и reports/junit.xml.
Запуск сборки и проверка результатов тестирования
На этом этапе вы запустите задание и изучите опубликованный отчет о тестировании. Первый отчет содержит два успешно пройденных теста, поэтому Jenkins должен пометить сборку как успешную.
На странице задания test-report-demo нажмите Build Now.
Когда в истории сборок появится сборка #1, откройте ее и нажмите Test Result.
На странице результатов тестирования должно быть указано ноль ошибок, а также должен быть перечислен пакет demo.

Выполните следующую команду в терминале, чтобы сохранить данные о результатах для проверки:
curl -fsS http://localhost:8080/job/test-report-demo/1/api/json | grep '"result":"SUCCESS"' | tee /home/labex/project/passing-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/1/testReport/api/json | grep '"failCount":0' | tee -a /home/labex/project/passing-test-result.txt
Вы должны увидеть:
"result":"SUCCESS"
"failCount":0
Добавление получателя уведомлений о сборке
На этом этапе вы добавите получателя уведомлений по электронной почте в Jenkins. В промышленном контроллере Jenkins потребовались бы настройки SMTP для отправки почты. В этой лабораторной работе важным концептуальным моментом для начинающих является понимание того, где именно в задании хранятся данные о получателе уведомлений.
На странице задания test-report-demo нажмите Configure.
Прокрутите вниз до раздела Post-build Actions, нажмите Add post-build action и выберите E-mail Notification.
В поле Recipients введите:
dev-team@example.com
Нажмите Save.

Выполните следующую команду, чтобы зафиксировать сохраненные настройки уведомлений:
docker exec jenkins sh -lc "grep -n -E 'hudson.tasks.Mailer|dev-team@example.com' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/mail-notification-lines.txt
Вывод должен содержать публикатор почты Jenkins и адрес получателя.
Вызов ошибки в тесте и повторная сборка
На этом этапе вы обновите шаг shell так, чтобы отчет JUnit содержал один неудачный тест. Jenkins помечает сборки с неудачными тестами JUnit как UNSTABLE — именно такой результат сборки должен быть выделен уведомлением для команды.
На странице задания test-report-demo нажмите Configure.
Найдите шаг сборки Execute shell. Замените команду на следующую, генерирующую отчет с ошибкой:
mkdir -p reports
printf '%s\n' \
'<testsuite name="LabExSuite" tests="2" failures="1" skipped="0">' \
' <testcase classname="demo.HealthTest" name="test_home_page"/>' \
' <testcase classname="demo.HealthTest" name="test_api_status">' \
' <failure message="API returned 500">simulated failure</failure>' \
' </testcase>' \
'</testsuite>' > reports/junit.xml
echo "Generated failing JUnit report"
Нажмите Save, а затем Build Now.
Когда появится сборка #2, откройте ее и нажмите Test Result. На странице должен отобразиться один неудачный тест.

Выполните следующую команду, чтобы сохранить доказательство нестабильной сборки:
curl -fsS http://localhost:8080/job/test-report-demo/2/api/json | grep '"result":"UNSTABLE"' | tee /home/labex/project/unstable-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/2/testReport/api/json | grep '"failCount":1' | tee -a /home/labex/project/unstable-test-result.txt
Вы должны увидеть:
"result":"UNSTABLE"
"failCount":1
Резюме
Вы создали проект Jenkins Freestyle через панель управления, сгенерировали отчет JUnit XML, опубликовали его с помощью действия после сборки, изучили отчеты об успешных и неудачных тестах, а также настроили получателя уведомлений по электронной почте для данного задания.