Интеграция с Jenkins
Эта страница описывает, как настроить ТестОпс и Jenkins в проекте, который использует Jenkins для запуска тестов.
Примечание
Чтобы настроить или удалить интеграцию в ТестОпс, вы должны иметь доступ к разделам:
- Администрирование — необходимы права администратора инстанса;
- Настройки в конкретном проекте — необходима роль владельца этого проекта.
Интеграция с Jenkins позволяет настроить двустороннюю связь:
- Сборка Jenkins отправляет свой статус и результаты тестов в ТестОпс.
- ТестОпс использует API Jenkins для запуска новых пайплайнов, при необходимости передавая тест-план.
Настройка интеграции
Чтобы настроить интеграцию с Jenkins:
Настройте связь от ТестОпс к Jenkins:
Создайте токен в Jenkins.
На уровне инстанса ТестОпс добавьте интеграцию с Jenkins, указав:
- название интеграции;
- URL-адрес Jenkins.
На уровне инстанса или проекта ТестОпс включите добавленную интеграцию для проекта, указав созданный токен из Jenkins.
Настройте связь от Jenkins к ТестОпс:
- Создайте API-токен в ТестОпс.
- Установите плагин ТестОпс в Jenkins.
- Укажите параметры инстанса ТестОпс в Jenkins, в том числе созданный API-токен из ТестОпс.
- Измените freestyle-проект или скрипт пайплайна в Jenkins.
- Запустите и проверьте джобу в Jenkins.
- Настройте созданную джобу в ТестОпс.
Параметризируйте джобы Jenkins (если необходимо).
1. Настройте связь от ТестОпс к Jenkins
1.1. Создайте токен в Jenkins
В Jenkins нажмите на ваше имя пользователя и перейдите в раздел Security.
В разделе API Token нажмите Add new Token.
Введите название (например, "Token for TestOps") и нажмите Generate.
В появившемся окне нажмите иконку Копировать, чтобы скопировать токен в буфер обмена.
Cохраните токен в безопасном месте, он понадобится для настройки интеграции в проекте ТестОпс.
1.2. Добавьте интеграцию с Jenkins в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Интеграции.
Нажмите + Добавить интеграцию в правом верхнем углу.
В списке доступных интеграций выберите Jenkins.
Заполните поля:
- Название — название, которое поможет вам распознать интеграцию, например, Jenkins production.
- Endpoint — URL-адрес инстанса Jenkins, например, https://jenkins.example.com/.
Если ваш инстанс Jenkins использует самоподписанный SSL-сертификат, поставьте галочку напротив Отключить проверку сертификата.
Нажмите Добавить интеграцию.
1.3. Включите интеграцию для проекта ТестОпс
Чтобы включить интеграцию в нужном проекте ТестОпс, воспользуйтесь одним из способов:
Перейдите в раздел Администрирование → Интеграции.
В списке настроенных интеграций найдите и откройте вашу интеграцию с Jenkins.
Перейдите на вкладку Проекты.
Справа от поля поиска нажмите
+.В выпадающем списке Проект выберите нужный проект ТестОпс.
В появившемся окне заполните поля:
- Имя пользователя — имя пользователя Jenkins (из профиля в Jenkins).
- Токен — токен, который вы сохранили на шаге 1.1.
Нажмите Проверить соединение. Если учетные данные верны, через несколько секунд появится сообщение «Соединение установлено».
Нажмите Добавить интеграцию.
2. Настройте связь от Jenkins к ТестОпс
Выполните шаги ниже, чтобы настроить вторую часть двусторонней связи: отправку статусов джоб и результатов тестов из Jenkins в ТестОпс.
2.1. Создайте токен в ТестОпс
В ТестОпс нажмите на ваш аватар и перейдите в раздел API-токены.
Нажмите + Токен.
Введите название токена, которое поможет вам распознать интеграцию, например, Токен для Jenkins.
Нажмите Создать.
ТестОпс сгенерирует токен и отобразит его в модальном окне.
Нажмите иконку Копировать, чтобы скопировать токен в буфер обмена.
Cохраните токен в безопасном месте, он понадобится для настройки интеграции в Jenkins.
2.2 Установите плагин для Jenkins
Для установки плагина ТестОпс мы рекомендуем указать его URL-адрес в настройках Jenkins. Если ваш инстанс Jenkins не имеет доступа к интернету, вы можете загрузить HPI-файл плагина в Jenkins вручную. Выбранный метод установки не влияет на функциональность плагина.
Указание URL-адреса
Выберите последнюю версию плагина на странице jenkins-plugin и скопируйте URL-адрес HPI-файла.
Внимание
Обратите внимание, что начиная с 15 февраля 2024 года существует 2 версии плагина:
- версия 4 для Jenkins 2.361.1 и выше, использующая Java 17;
- версия 3 для Jenkins ниже 2.361.1, использующая Java 11.
Если вы используете версию 4, то на стороне агента (раннера) Jenkins у вас должна быть установлена Java версии 17, иначе плагин не сможет запуститься и загрузка результатов не будет работать.
В Jenkins перейдите в раздел Manage Jenkins → Manage Plugins → Advanced settings.
В разделе Deploy Plugin вставьте URL-адрес HPI-файла.
Нажмите Deploy, чтобы подтвердить установку плагина.
На странице Download progress дождитесь статуса
Successдля каждого этапа.
Загрузка файла
Выберите последнюю версию плагина на странице jenkins-plugin и скачайте HPI-файл в локальную директорию на вашем устройстве.
В Jenkins перейдите в раздел Manage Jenkins → Manage Plugins → Advanced settings.
В разделе Deploy Plugin нажмите Browse и выберите скачанный HPI-файл.
Нажмите Deploy, чтобы подтвердить установку плагина.
На странице Download progress дождитесь статуса
Successдля каждого этапа.
2.3. Укажите параметры инстанса ТестОпс в Jenkins
В Jenkins перейдите в раздел Manage Jenkins → System.
В разделе Allure нажмите Add Allure Server → Allure Server.
Заполните поля:
- ID — название, которое поможет вам распознать инстанс ТестОпс.
- Endpoint — URL-адрес инстанса ТестОпс.
Рядом с полем Credentials нажмите Add → Jenkins.
В появившемся окне заполните поля:
- Kind — Secret text.
- Secret — API-токен, который вы сохранили на шаге 2.1.
- ID — название, которое поможет вам распознать токен, например, “testops-credentials”.
Нажмите Add, чтобы закрыть окно.
В выпадающем списке Credentials выберите название токена (“testops-credentials” из прошлого шага).
Если ваш инстанс ТестОпс использует самоподписанный SSL-сертификат, снимите галочку напротив Enable certificate validation.
Нажмите Test connection. Если учетные данные верны, через несколько секунд появится сообщение "Successfully authorized as ⟨USERNAME⟩".
Нажмите Advanced, чтобы настроить дополнительные параметры:
- Threads count — максимальное количество потоков для загрузки файлов на инстанс.
- Batch size — максимальное количество файлов для загрузки на инстанс за раз (одним потоком).
- Results depth — количество уровней подкаталогов в директории с результатами тестов для сканирования и загрузки. "0" означает, что подкаталоги не будут загружены.
- Process interval — минимальный интервал (в секундах) между отправкой пакетов файлов (одним потоком).
- Indexing interval — интервал (в секундах) между сканированием директории с результатами тестов.
- Delay interval — минимальный интервал (в секундах) перед загрузкой вновь созданного файла (чтобы избежать загрузки наполовину записанных файлов).
- Delay before upload finish — интервал (в секундах) после завершения джобы перед предположением, что в директории не появятся другие файлы. Это необходимо для избежания проблем с некоторыми тестовыми раннерами, которые могут создавать новые процессы для записи файлов.
Нажмите Save внизу страницы.
2.4a. Измените freestyle-проект
В Jenkins freestyle-проект — это конфигурация сборки, для которой вы добавляете и редактируете шаги через интерфейс. После установки плагина ТестОпс вы можете использовать тот же интерфейс для включения и настройки автоматической загрузки результатов тестов на инстанс ТестОпс.
В Jenkins выберите джобу, для которой вы хотите включить загрузку.
В сайдбаре слева перейдите в раздел Configure.
В разделе Build Environment поставьте галочку напротив Allure: upload results.
Заполните поля:
- Server — название инстанса ТестОпс, которое вы указали на шаге 2.3.
- Project — ID проекта ТестОпс.
- Launch name — шаблон для именования запусков тестов. Вы можете использовать любые переменные окружения Jenkins (см. страницу /env-vars.html на вашем инстансе Jenkins для полного списка).
- Launch tags — список тегов, которые должны быть присвоены запуску тестов (через запятую).
Нажмите Add results → Results.
В поле Results → Path укажите путь к директории с результатами тестов, например, build/allure-results.
Совет
Если у вас несколько шагов сборки, генерирующих результаты тестов в несколько директорий, используйте кнопку Add, чтобы указать больше путей.
Плагин для Jenkins не поддерживает подстановочные символы и шаблоны в поле Path.
Нажмите Advanced, чтобы настроить дополнительные параметры джобы:
Silent mode — если установлено, ошибка соединения при попытке загрузить результаты тестов не будет считаться ошибкой джобы.
Мы рекомендуем использовать этот режим только в случае, если у вас есть другие средства для просмотра результатов тестов (например, если у вас также установлен плагин Allure Report для Jenkins).
Index Existing Files — если установлено, ТестОпс загрузит все файлы, найденные в целевой директории, даже если они не были обновлены во время этого запуска.
Нажмите Save.
2.4b. Измените скрипт пайплайна Jenkins
Если вы храните джобу в скрипте пайплайна Jenkins, плагин ТестОпс добавит блок withAllureUpload() и интерфейс для генерации фрагмента кода, который его использует.
В Jenkins выберите джобу, для которой вы хотите включить загрузку.
В сайдбаре слева перейдите в раздел Pipeline Syntax.
Откроется интерфейс для генерации фрагментов кода для пайплайна Jenkins.
В выпадающем списке Sample Step выберите withAllureUpload: Allure: upload results.
Заполните поля:
- Server — название инстанса ТестОпс, которое вы указали на шаге 2.3.
- Project — ID проекта ТестОпс.
- Launch name — шаблон для именования запусков тестов. Вы можете использовать любые переменные окружения Jenkins (см. страницу /env-vars.html на вашем инстансе Jenkins для полного списка).
- Launch tags — список тегов, которые должны быть присвоены запуску тестов (через запятую).
Нажмите Add results → Results.
В поле Results → Path укажите путь к директории с результатами тестов, например, build/allure-results.
Совет
Если у вас несколько шагов сборки, генерирующих результаты тестов в несколько директорий, используйте кнопку Add, чтобы указать больше путей.
Плагин для Jenkins не поддерживает подстановочные символы и шаблоны в поле Path.
Нажмите Advanced, чтобы настроить дополнительные параметры:
Silent mode — если установлено, ошибка соединения при попытке загрузить результаты тестов не будет считаться ошибкой джобы.
Мы рекомендуем использовать этот режим только если у вас есть другие средства для просмотра результатов тестов (например, если у вас также установлен плагин Allure Report для Jenkins).
Index Existing Files — если установлено, ТестОпс загрузит все файлы, найденные в целевой директории, даже если они не были обновлены во время этого запуска.
Нажмите Generate Pipeline Script.
В области под кнопкой появится фрагмент кода. Например:
groovywithAllureUpload(name: '${JOB_NAME} - #${BUILD_NUMBER}', projectId: '1', results: [[path: 'build/allure-results']], serverId: 'TestOps production', tags: '') { // блок кода }Скопируйте сгенерированный фрагмент кода в буфер обмена для использования позже.
Откройте скрипт Groovy, который вы используете для проекта. Это может быть:
- скрипт в текстовом поле в Configure → Pipeline;
- Jenkinsfile в системе управления версиями проекта (см. официальную документацию).
Найдите команду (или набор команд), которая запускает тесты, и оберните их в блок
withAllureUpload()из сгенерированного фрагмента.Если вы используете синтаксис декларативного пайплайна, блок
withAllureUpload()должен быть размещен внутри блокаsteps. Например:groovypipeline { agent any stages { stage('Build') { steps { git 'https://github.com/ivanivanov/testops-example.git' withAllureUpload(name: '${JOB_NAME} - #${BUILD_NUMBER}', projectId: '1', results: [[path: 'build/allure-results']], serverId: 'TestOps production', tags: '') { sh './gradlew clean test' } } } } }Сохраните скрипт. В случае Jenkinsfile убедитесь, что изменения закомичены в репозиторий.
2.5. Запустите и проверьте джобу в Jenkins
В Jenkins выберите джобу, для которой вы настраиваете интеграцию.
Нажмите Build Now.
Дождитесь, когда завершится сборка.
В Build History нажмите на последнюю сборку.
В сайдбаре слева и внизу страницы найдите ссылки на запуск в ТестОпс.

Перейдите по ссылке в ТестОпс и откройте результаты одного из тестов.
В карточке результата теста в левом нижнем углу найдите ссылку на джобу Jenkins.

Перейдите по ссылке в Jenkins, чтобы убедиться, что она работает корректно.
2.6. Настройте джобу в ТестОпс
Перейдите в ваш проект ТестОпс.
Перейдите в раздел Джобы.
На странице должна быть новая джоба, автоматически добавленная и настроенная во время запуска на шаге 2.5.
Нажмите
⋯напротив джобы и выберите Настроить.В появившемся окне заполните поля:
- Название — название, которое поможет вам распознать джобу.
- Сервер сборки — название интеграции, которую вы добавили на шаге 1.2.
- Джоба может быть использована для запуска тестов — если установлено, пользователи смогут запускать эту джобу из ТестОпс.
- Параметры — параметры, которые должны быть переданы в Jenkins через переменные окружения, см. Окружение.

Нажмите Отправить.
3. Параметризируйте джобы
Jenkins поддерживает параметризованные сборки. ТестОпс интегрирует эту функцию с собственной концепцией Окружения, которая позволяет вам как задавать параметры для новых джоб, так и видеть параметры, установленные для джоб, запущенных вне ТестОпс.
Важно
Если в репозитории вашего проекта есть несколько веток, обязательно создайте переменную окружения Branch в ТестОпс и передайте ее в вашу джобу. Это специальное имя укажет Jenkins, какую из веток нужно использовать.
3.1. Установите значения по умолчанию в Jenkins
В Jenkins выберите джобу, для которой вы настроили интеграцию с ТестОпс.
В сайдбаре слева перейдите в раздел Configure.
В разделе General поставьте галочку напротив This project is parameterized.
Для каждого параметра, который вы хотите добавить, нажмите Add Parameter → String Parameter и заполните поля:
- Name — имя переменной.
- Default Value — значение по умолчанию, которое должно использоваться, если не переопределено для конкретного запуска.
Нажмите Save, чтобы сохранить новые параметры.

3.2. Добавьте глобальные переменные окружения в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Окружения.
Для каждого параметра, который вы хотите добавить, нажмите + Создать, введите название параметра и нажмите Отправить.
Обратите внимание, что это название может быть человекочитаемым и не обязательно должно совпадать с названием из шага 3.1.

3.3. Сопоставьте параметры с переменными окружения в ТестОпс
Перейдите в ваш проект ТестОпс.
Перейдите в раздел Настройки → Окружение.
Для каждого параметра, который вы хотите использовать:
- Нажмите + Создать, если параметра нет в списке. Если параметр уже существует, нажмите иконку Редактировать рядом с его названием.
- В поле Ключ укажите название переменной окружения из шага 3.1.
- В поле Переменная окружения выберите глобальное название параметра из шага 3.2.
- Нажмите Отправить.

3.4. Добавьте параметры в джобу ТестОпс
Перейдите в раздел Джобы.
Напротив джобы, которую вы хотите параметризовать, нажмите иконку Обновить настройки джобы с сервера сборки.
Имена параметров и их значения по умолчанию появятся в описании джобы.

Напротив джобы нажмите
⋯→ Настроить.Для каждого параметра, который вы хотите использовать, в секции Параметры выберите соответствующее переменную окружения из шага 3.2.

Нажмите Отправить.
Удаление интеграции
Вы можете удалить интеграцию с Jenkins двумя способами — на уровне всего инстанса ТестОпс (через раздел Администрирование) или на уровне отдельного проекта (через настройки проекта).
Важно
Последствия удаления интеграции:
Удаление на уровне инстанса — связь с инстансом Jenkins будет удалена из всех джоб ТестОпс, которые относятся к интеграции:
- Иконки для запуска и обновления этих джоб в разделе Джобы станут неактивными.
- Результаты запусков тестов из Jenkins не будут отправляться в инстанс ТестОпс.
Удаление на уровне проекта — связь с инстансом Jenkins будет удалена из джобы ТестОпс, которая относится к интеграции и находится в этом проекте:
- Иконки для запуска и обновления этой джобы в разделе Джобы останутся активными.
- ТестОпс не сможет запустить тесты из проекта на стороне Jenkins. После закрытия запуска результаты этих тестов получат статус Неизвестный.
- Результаты запусков тестов из Jenkins не будут отправляться в проект ТестОпс.
Перейдите в раздел Администрирование → Интеграции.
В списке настроенных интеграций найдите и откройте вашу интеграцию с Jenkins.
Перейдите на вкладку Проекты и убедитесь, что интеграция не используется в проектах ТестОпс.
Если интеграция подключена к проектам, удалите ее из них. Для этого напротив названия каждого проекта нажмите иконку корзины → Удалять.
Перейдите на вкладку Конфигурация.
Нажмите Удалить интеграцию.
Нажмите Удалить.
Устранение неполадок
Плагин Jenkins не может начать загрузку данных (сообщение "Could not create session for closed launch" в логах)
В некоторых случаях вы можете столкнуться с ситуацией, когда плагин Jenkins не может загрузить данные в ТестОпс и выводит сообщение "Could not create session for closed launch" в журнал.
Это связано с тем, что пайплайны Jenkins не имеют уникального идентификатора, кроме их названия. Следовательно, если вы удалите пайплайн и создадите новый с тем же названием, вы не сможете загрузить данные в ТестОпс, потому что это название уже использовалось.
Чтобы исправить это, переименуйте пайплайн, выбрав название, которое не использовали до этого.
Плагин Jenkins не может начать загрузку данных ("java.lang.UnsupportedClassVersionError")
Проблема
Возникли ошибки, вызвавшие проблемы с загрузкой результатов тестов:
shell
java.lang.UnsupportedClassVersionError: <...>/jenkins/callable/UploadResultsCallable has been compiled by a more recent version of
the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0Далее следует:
shell
Caused: hudson.remoting.ProxyException: <...>.jenkins.AllurePluginException: Could not stop uploaderПричина
Это означает, что вы используете плагин ТестОпс, несовместимый с текущей версией Jenkins (Java, используемая Jenkins, новее, чем версия, используемая плагином ТестОпс).
Решение
Вам нужно обновить плагин до версии, совместимой с Java 17.
Также проверьте версию вашего Jenkins. Обязательно установите версию Java на агентах Jenkins такую же, как на хосте Jenkins. Для версий Jenkins выше 2.361.1 это Java 17. Если версии хоста и агента будут разными, код плагина не сможет быть запущен на агенте и работа с агентами будет невозможна.

