Jenkins#

Задача#

  • запускать тесты в Jenkins;

  • автоматически получать результаты SLA;

  • запускать пайплайн в зависимости от результатов SLA.

Решение#

  1. Создайте и настройте тест в Boomq.

  2. Установите плагины в Jenkins:

  3. Создайте пайплайн для запуска теста.

  4. Создайте пайплайн для получения SLA и вебхука из Boomq.

  5. Создайте пайплайны, которые будут запускаться в зависимости от результата SLA.

  6. Запустите тест или настройте запуск по расписанию.

  7. Посмотрите результаты.

Создание и настройка теста в Boomq#

  1. Создайте тест.

  2. Настройте SLA.

  3. Создайте набор настроек.

  4. В наборе настроек перейдите на вкладку Вебхуки.

  5. Нажмите на кнопку + Добавить вебхук.

  6. В выпадающем списке Статус теста установите флажки Закончен и Прерван.

  7. Нажмите на кнопку Редактировать запрос.

  8. В поле URL укажите JENKINS_URL/generic-webhook-trigger/invoke.

  9. В поле Ключ укажите заголовок token, а в поле Значение – токен Jenkins:

    _images/um_ci_jenkins_webhook.ru.png
  10. Нажмите на кнопку Сохранить.

Создание пайплайна для запуска теста#

  1. В Jenkins в левой колонке нажмите на кнопку Создать Item.

  2. Укажите имя проекта, выберите пункт Pipeline и нажмите на кнопку OK.

  3. В выпадающем списке GitLab Connection выберите необходимое значение.

  4. Установите флажок Это - параметризованная сборка.

  5. Нажмите на кнопку Добавить параметр и выберите пункт String Parameter.

  6. В поле Имя укажите secret_api_keyAPI токен:

    _images/um_ci_jenkins_string_parameter.ru.png
  7. Установите флажок Trim the string.

  8. Аналогично добавьте параметры:

    • testId – ID теста;

    • testVersionId – ID версии теста.

    Значения параметров запрашиваются при сборке проекта Jenkins.

  9. На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script:

    _images/um_ci_jenkins_pipeline.png
  10. В поле 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
                    }
                }
            }
        }
    }
    

    Указанный скрипт:

    1. Отправляет POST-запрос для запуска теста.

    2. Сохраняет ответ на запрос.

  11. Убедитесь, что снят флажок Use Groovy Sandbox.

  12. Нажмите на кнопку Сохранить.

Создание пайплайна для получения SLA и вебхука из Boomq#

После окончания теста Boomq присылает вебхук в Jenkins. Автоматически пайплайн отправит запрос на получение SLA.

Чтобы создать пайплайн:

  1. В Jenkins в левой колонке нажмите на кнопку Создать Item.

  2. Укажите имя проекта, выберите пункт Pipeline и нажмите на кнопку OK.

  3. В выпадающем списке GitLab Connection выберите необходимое значение.

  4. На вкладке Build Triggers установите флажок Generic Webhook Trigger.

  5. Для блока Post content parameters нажмите на кнопку Добавить:

  6. Заполните поля:

    • в поле Variable укажите имя переменной testRunId – ID запуска теста;

    • установите переключатель JSONPath;

    • в поле Expression укажите значение $.id. С помощью JSONPath-выражения после запуска извлекается ID запуска теста для получения SLA.

  7. В поле Token укажите токен Jenkins.

  8. В поле Cause укажите значение Generic Cause.

  9. Установите флажки Print post content и Print contributed variables.

  10. На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script.

  11. В поле 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)
                        }
                    }
                }
            }
        }
    }
    

    Указанный скрипт:

    1. Отправляет GET-запрос для получения SLA с ID теста, полученного после запуска теста.

    2. Анализирует статус SLA:

      • если SLA имеет статус SUCCESS, то скрипт запускает пайплайн Green_Job;

      • если SLA имеет статус FAILURE, то скрипт запускает пайплайн Red_Job.

  12. Убедитесь, что снят флажок Use Groovy Sandbox.

  13. Нажмите на кнопку Сохранить.

Создание пайплайнов, которые запускаются в зависимости от результата SLA#

На основании результатов SLA принимается решение о переходе на следующий этап пайплайна, например:

  • если результаты тестирования нас не удовлетворяют, код возвращается на доработку;

  • если тестирование успешно, приложение разворачивается в продуктивной среде.

В нашем примере создадим пайплайны, которые только выводят сообщение в консоль:

  1. В Jenkins в левой колонке нажмите на кнопку Создать Item.

  2. Укажите имя проекта Green_Job, выберите пункт Pipeline и нажмите на кнопку OK.

  3. В выпадающем списке GitLab Connection выберите необходимое значение.

  4. На вкладке Pipeline в выпадающем списке Definition выберите значение Pipeline script.

  5. В поле Script укажите код:

    pipeline {
        agent { node "master" }
    
        stages {
            stage("Execute green quality gate step") {
                steps {
                    script {
                        echo "This is green job for demo!"
                    }
                }
            }
        }
    }
    
  6. Убедитесь, что снят флажок Use Groovy Sandbox.

  7. Нажмите на кнопку Сохранить.

  8. Аналогично создайте пайплайн Red_Job со скриптом:

    pipeline {
        agent { node "master" }
    
        stages {
            stage("Execute red quality gate step") {
                steps {
                    script {
                        echo "This is green job for demo!"
                    }
                }
            }
        }
    }
    

Запуск тестов в Jenkins#

  1. Откройте проект для запуска теста.

  2. В левой колонке нажмите на кнопку Собрать с параметрами.

  3. Заполните поля:

    • secret_api_key. API токен;

    • test_id. ID теста. Чтобы узнать ID теста:

      1. В Boomq перейдите в раздел Тесты.

      2. Выберите тест. ID теста отображается в адресной строке: testId

    • test_version_id. ID версии теста. Чтобы узнать ID версии теста:

      1. В Boomq перейдите в раздел Запуски.

      2. Выберите запуск теста.

      3. Нажмите на кнопку Тест. ID версии теста отображается в адресной строке: testVersionId

  4. Нажмите на кнопку Собрать.

После запуска теста автоматически запустится пайплайн для получения SLA.

Периодическое выполнение тестов#

  1. Откройте проект для запуска теста и в левой колонке нажмите на кнопку Настройки.

  2. Перейдите в раздел Триггеры сборки и установите флажок Запускать периодически.

  3. В поле Расписание укажите CRON-выражение. Например, чтобы выполнять запросы каждый рабочий день в 22:00:

    0 22 * * 1-5
    
  4. Нажмите на кнопку Сохранить.

Чтобы настроить выполнение запросов по событию, например, по коммиту, воспользуйтесь инструкциями Jenkins по используемому стеку технологий.

Просмотр результатов#

Чтобы посмотреть результаты SLA:

  1. Откройте проект для получения SLA.

  2. Выберите сборку в истории сборок:

    _images/um_ci_jenkins_build_history.ru.png
  3. Нажмите на кнопку Вывод консоли.