Jenkins#
Задача#
запускать тесты в Jenkins;
автоматически получать результаты SLA;
запускать пайплайн в зависимости от результатов SLA.
Решение#
Установите плагины в Jenkins:
Создайте пайплайны, которые будут запускаться в зависимости от результата SLA.
Запустите тест или настройте запуск по расписанию.
Создание и настройка теста в Boomq#
В наборе настроек перейдите на вкладку Вебхуки.
Нажмите на кнопку + Добавить вебхук.
В выпадающем списке Статус теста установите флажки Закончен и Прерван.
Нажмите на кнопку Редактировать запрос.
В поле URL укажите
JENKINS_URL/generic-webhook-trigger/invoke
.В поле Ключ укажите заголовок
token
, а в поле Значение – токен Jenkins:Нажмите на кнопку Сохранить.
Создание пайплайна для запуска теста#
В Jenkins в левой колонке нажмите на кнопку Создать Item.
Укажите имя проекта, выберите пункт Pipeline и нажмите на кнопку OK.
В выпадающем списке GitLab Connection выберите необходимое значение.
Установите флажок Это - параметризованная сборка.
Нажмите на кнопку Добавить параметр и выберите пункт String Parameter.
В поле Имя укажите
secret_api_key
— API токен:Установите флажок Trim the string.
Аналогично добавьте параметры:
testId – ID теста;
testVersionId – ID версии теста.
Значения параметров запрашиваются при сборке проекта Jenkins.
На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script:
В поле Script укажите код:
pipeline { agent { node "master" } stages { stage("Start test") { steps { script { def patchOrg = """ {"testId": ${test_id}, "testVersionId": ${test_version_id}} """ def response = httpRequest(url: "https://{BASE_URL}/public-api/v1/testRun", customHeaders: [[name: 'api-token', value: "${secret_api_key}"]], requestBody: patchOrg, httpMode: 'POST', consoleLogResponseBody: true, contentType: 'APPLICATION_JSON' ) def responseBody = readJSON text: response.content } } } } }
Указанный скрипт:
Отправляет POST-запрос для запуска теста.
Сохраняет ответ на запрос.
Убедитесь, что снят флажок Use Groovy Sandbox.
Нажмите на кнопку Сохранить.
Создание пайплайна для получения SLA и вебхука из Boomq#
После окончания теста Boomq присылает вебхук в Jenkins. Автоматически пайплайн отправит запрос на получение SLA.
Чтобы создать пайплайн:
В Jenkins в левой колонке нажмите на кнопку Создать Item.
Укажите имя проекта, выберите пункт Pipeline и нажмите на кнопку OK.
В выпадающем списке GitLab Connection выберите необходимое значение.
На вкладке Build Triggers установите флажок Generic Webhook Trigger.
Для блока Post content parameters нажмите на кнопку Добавить:
Заполните поля:
в поле Variable укажите имя переменной
testRunId
– ID запуска теста;установите переключатель JSONPath;
в поле Expression укажите значение
$.id
. С помощью JSONPath-выражения после запуска извлекается ID запуска теста для получения SLA.
В поле Token укажите токен Jenkins.
В поле Cause укажите значение
Generic Cause
.Установите флажки Print post content и Print contributed variables.
На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script.
В поле Script укажите код:
def SLA_SUCCESS_STATUS = "SUCCESS" def SLA_FAILED_STATUS = "FAILURE" def GREEN_JOB_NAME = "Green_Job" def RED_JOB_NAME = "Red_Job" pipeline { agent { node "master" } stages { stage("Receive webhook") { steps { script { echo "pipeline executed via webhook" def response = httpRequest(url: "https://{BASE_URL}/public-api/v1/testRun/sla?testRunId=${test_run_id}", customHeaders: [[name: 'api-token', value: 'API token']], httpMode: 'GET', consoleLogResponseBody: true, contentType: 'APPLICATION_JSON' ) def responseBody = readJSON text: response.content def slaStatus = responseBody['slaResults']['status'] echo "${slaStatus}" if (slaStatus.equalsIgnoreCase(SLA_SUCCESS_STATUS)) { build(job: GREEN_JOB_NAME) } if (slaStatus.equalsIgnoreCase(SLA_FAILED_STATUS)) { build(job: RED_JOB_NAME) } } } } } }
Указанный скрипт:
Отправляет GET-запрос для получения SLA с ID теста, полученного после запуска теста.
Анализирует статус SLA:
если SLA имеет статус SUCCESS, то скрипт запускает пайплайн Green_Job;
если SLA имеет статус FAILURE, то скрипт запускает пайплайн Red_Job.
Убедитесь, что снят флажок Use Groovy Sandbox.
Нажмите на кнопку Сохранить.
Создание пайплайнов, которые запускаются в зависимости от результата SLA#
На основании результатов SLA принимается решение о переходе на следующий этап пайплайна, например:
если результаты тестирования нас не удовлетворяют, код возвращается на доработку;
если тестирование успешно, приложение разворачивается в продуктивной среде.
В нашем примере создадим пайплайны, которые только выводят сообщение в консоль:
В Jenkins в левой колонке нажмите на кнопку Создать Item.
Укажите имя проекта
Green_Job
, выберите пункт Pipeline и нажмите на кнопку OK.В выпадающем списке GitLab Connection выберите необходимое значение.
На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script.
В поле Script укажите код:
pipeline { agent { node "master" } stages { stage("Execute green quality gate step") { steps { script { echo "This is green job for demo!" } } } } }
Убедитесь, что снят флажок Use Groovy Sandbox.
Нажмите на кнопку Сохранить.
Аналогично создайте пайплайн
Red_Job
со скриптом:pipeline { agent { node "master" } stages { stage("Execute red quality gate step") { steps { script { echo "This is green job for demo!" } } } } }
Запуск тестов в Jenkins#
Откройте проект для запуска теста.
В левой колонке нажмите на кнопку Собрать с параметрами.
Заполните поля:
secret_api_key. API токен;
test_id. ID теста. Чтобы узнать ID теста:
В Boomq перейдите в раздел Тесты.
Выберите тест. ID теста отображается в адресной строке:
test_version_id. ID версии теста. Чтобы узнать ID версии теста:
В Boomq перейдите в раздел Запуски.
Выберите запуск теста.
Нажмите на кнопку Тест. ID версии теста отображается в адресной строке:
Нажмите на кнопку Собрать.
После запуска теста автоматически запустится пайплайн для получения SLA.
См.также
Периодическое выполнение тестов#
Откройте проект для запуска теста и в левой колонке нажмите на кнопку Настройки.
Перейдите в раздел Триггеры сборки и установите флажок Запускать периодически.
В поле Расписание укажите CRON-выражение. Например, чтобы выполнять запросы каждый рабочий день в 22:00:
0 22 * * 1-5
Нажмите на кнопку Сохранить.
Чтобы настроить выполнение запросов по событию, например, по коммиту, воспользуйтесь инструкциями Jenkins по используемому стеку технологий.
Просмотр результатов#
Чтобы посмотреть результаты SLA:
Откройте проект для получения SLA.
Выберите сборку в истории сборок:
Нажмите на кнопку Вывод консоли.