Интеграция с TeamCity
Интеграция ТестОпс с TeamCity позволяет настроить следующие связи:
- одна джоба в ТестОпс соответствует одной конфигурации сборки TeamCity,
- один запуск джобы ТестОпс соответствует одной сборке TeamCity.
Новая сборка TeamCity может быть запущена либо ТестОпс, либо самим TeamCity, при этом обе стороны отображают ее статус в своих веб-интерфейсах.
Во время выполнения тестов плагин ТестОпс для TeamCity регулярно сканирует новые файлы в директории результатов тестов (например, build/allure-results, см. Allure Report → Как это работает). Для каждого нового файла плагин немного ждет (чтобы избежать загрузки наполовину записанных файлов), затем загружает файл на инстанс ТестОпс. Таким образом ТестОпс получает результаты тестов как можно скорее и может показать частичные результаты запуска еще до завершения джобы.
Настройка интеграции
Примечание
Чтобы настроить интеграцию в ТестОпс, вы должны иметь доступ к разделам:
- Администрирование — необходимы права администратора инстанса;
- Настройки в конкретном проекте — необходима роль владельца этого проекта.
Чтобы настроить интеграцию с TeamCity:
Настройте связь от ТестОпс к TeamCity:
Создайте токен в TeamCity.
На уровне инстанса ТестОпс добавьте интеграцию с TeamCity, указав:
- название интеграции;
- URL-адрес TeamCity.
На уровне инстанса или проекта ТестОпс включите добавленную интеграцию для проекта, указав учетные данные из TeamCity.
Настройте связь от TeamCity к ТестОпс:
- Создайте API-токен в ТестОпс.
- В TeamCity установите плагин ТестОпс.
- Укажите параметры инстанса ТестОпс в TeamCity, в том числе созданный API-токен из ТестОпс.
- Измените конфигурацию сборки в TeamCity.
- Добавьте новую джобу в ТестОпс.
Параметризуйте джобы TeamCity (если необходимо).
Важно
В настоящее время плагин для TeamCity не поддерживает инстансы ТестОпс с самоподписанными сертификатами.
Перед настройкой интеграции, пожалуйста, убедитесь, что вы используете правильно подписанный сертификат или рассмотрите возможность сделать ТестОпс доступным вашему инстансу TeamCity через нешифрованный HTTP.
1. Настройте связь от ТестОпс к TeamCity
1.1. Создайте токен в TeamCity
Примечание
Пропустите этот шаг, если вы планируете использовать свое имя пользователя и пароль в качестве учетных данных.
В TeamCity нажмите на ваш аватар и перейдите в Профиль.
В меню слева нажмите Access Tokens.
Нажмите Create access token.
В появившемся окне заполните поля:
- Token name — название, которое поможет вам распознать токен, например, Токен для ТестОпс.
- Permission scope — Limit per project
- Project — проект TeamCity, для которого вы настраиваете интеграцию.
- Permissions — Run build и Comment build.
Нажмите Create.
Рядом с Token value нажмите значок Копировать, чтобы скопировать токен в буфер обмена.
Сохраните токен в безопасном месте, он понадобится для настройки интеграции в проекте ТестОпс.
1.2. Добавьте интеграцию с TeamCity в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Интеграции.
Нажмите + Добавить интеграцию в правом верхнем углу.
В списке доступных интеграций выберите TeamCity.
Заполните поля:
- Название — название, которое поможет вам распознать интеграцию, например, TeamCity production.
- Endpoint — URL-адрес инстанса TeamCity, например, https://teamcity.example.com/.
Если ваш инстанс TeamCity использует самоподписанный SSL-сертификат, поставьте галочку Отключить проверку сертификата.
Нажмите Добавить интеграцию.
1.3. Включите интеграцию для проекта ТестОпс
Чтобы включить интеграцию в нужном проекте ТестОпс воспользуйтесь одним из двух способов ниже:
Перейдите в раздел Администрирование → Интеграции.
В списке настроенных интеграций найдите и откройте вашу интеграцию с TeamCity.
Перейдите на вкладку Проекты.
Нажмите + справа от поля поиска.
В выпадающем списке Проект выберите нужный проект.
В появившемся окне введите учетные данные для подключения к инстансу TeamCity. Есть два способа аутентификации:
Базовая аутентификация
На вкладке basic введите имя пользователя и пароль учетной записи в TeamCity.
Аутентификация по токену
На вкладке token введите токен, который вы получили на шаге 1.1.
Нажмите Проверить соединение. Если учетные данные верны, через несколько секунд появится сообщение «Соединение установлено».
Нажмите Добавить интеграцию, чтобы сохранить настройки.
2. Настройте связь от TeamCity к ТестОпс
Этот раздел описывает вторую часть двусторонней связи: отправку статусов джоб и результатов тестов из TeamCity в ТестОпс.
2.1. Создайте токен в ТестОпс
В ТестОпс нажмите на ваш аватар и перейдите в API-токены.
Нажмите + Токен.
Придумайте название для токена (например, «Токен для TeamCity») и нажмите Создать.
ТестОпс сгенерирует токен и отобразит его в модальном окне.
Нажмите значок Копировать, чтобы скопировать токен в буфер обмена.
Cохраните токен в безопасном месте, он понадобится для настройки интеграции в TeamCity.
2.2 Установите плагин для TeamCity
Рекомендуемый метод установки плагина ТестОпс — использовать функцию установки в один клик в JetBrains Marketplace. Однако, если ваша конфигурация TeamCity не имеет доступа к интернету, вы можете установить плагин, загрузив ZIP-архив в TeamCity вручную. Выбранный метод установки не влияет на функциональность плагина.
Установка из JetBrains Marketplace
В веб-интерфейсе TeamCity перейдите в Administration → Plugins и нажмите Browse plugins repository.
В появившемся окне нажмите Proceed.
Ваш браузер будет перенаправлен на JetBrains Marketplace.
В уведомлении в правом нижнем углу нажмите Proceed.
Это включит функцию установки в один клик для JetBrains Marketplace в вашем браузере.
Посетите страницу плагина ТестОпс в JetBrains Marketplace и нажмите Get → Install to ⟨hostname⟩.
Нажмите Install для подтверждения установки.
Подождите, пока плагин будет загружен и установлен.
Нажмите Enable uploaded plugin.
В появившемся окне нажмите Enable для подтверждения активации плагина.
Установка из файла
Посетите страницу плагина ТестОпс в JetBrains Marketplace и нажмите Get → Download.
Сохраните ZIP-архив в локальную директорию на вашем устройстве.
В веб-интерфейсе TeamCity перейдите в Administration → Plugins и нажмите Upload plugin zip.
В появившемся окне выберите ZIP-архив с вашего устройства.
Нажмите Upload plugin zip для подтверждения установки.
Подождите, пока плагин будет загружен и установлен.
Нажмите Enable uploaded plugin.
В появившемся окне нажмите Enable для подтверждения активации плагина.
2.3. Укажите параметры инстанса ТестОпс в TeamCity
Примечание
Для проекта на Kotlin DSL см. Справочник по Kotlin DSL ниже.
На главной странице TeamCity перейдите на страницу вашего проекта.
В правом верхнем углу нажмите Edit project.
В меню слева нажмите Allure Servers.
Если ссылка не видна, нажмите Show all, чтобы раскрыть ее.
Нажмите Add new server.
В появившемся окне заполните поля:
- Name — название, которое поможет вам распознать инстанс ТестОпс.
- URL — URL-адрес инстанса ТестОпс.
- Token — API-токен, который вы получили на шаге 2.1.
- Threads count — максимальное количество потоков для загрузки файлов на инстанс.
- Batch size — максимальное количество файлов для загрузки на инстанс за один раз (одним потоком).
- Results depth — количество уровней подкаталогов в директории результатов тестов для сканирования и загрузки. "0" означает, что подкаталоги не будут загружены.
- Process interval — минимальный интервал (в секундах) между отправками наборов файлов (одним потоком).
- Indexing interval — интервал (в секундах) между сканированиями директории результатов тестов.
- Delay interval — минимальный интервал (в секундах) перед загрузкой вновь созданного файла (чтобы избежать загрузки наполовину записанных файлов).
Нажмите Проверить соединение. Если учетные данные верны, через несколько секунд появится сообщение “Successfully authorized as ⟨USERNAME⟩”. Нажмите OK, чтобы закрыть сообщение.
Нажмите Save.
2.4. Измените конфигурацию сборки
Примечание
Для проекта на Kotlin DSL см. Справочник по Kotlin DSL ниже.
На главной странице TeamCity перейдите на страницу настроек вашей сборки.
В правом верхнем углу нажмите Edit configuration.
В меню слева нажмите Build Features.
Нажмите Add build features.
В выпадающем списке выберите Allure: upload results.
Заполните поля:
- Allure Server — название инстанса, который вы добавили на шаге 2.3.
- Project ID — идентификатор проекта в ТестОпс.
- Launch name — шаблон для именования запусков тестов. Здесь вы можете использовать предопределенные параметры сборки TeamCity.
- Launch tags — список тегов, которые должны быть присвоены запуску тестов (через запятую).
- Test Results Directories — путь к директории результатов тестов, например, build/allure-results. Если в вашем проекте несколько директорий с результатами тестов, вы можете разделить их запятыми или новыми строками, или использовать шаблон с подстановочными символами, например, modules/*/build/allure-results.
- Index existing files — если не отмечено, плагин не будет загружать файлы, созданные до начала выполнения сборки. Это означает, что файлы, уже находящиеся в папке allure-results до начала работы плагина, будут проигнорированы.
- Enable full log — если отмечено, плагин будет выводить больше деталей в журнал сборки. Такой журнал может быть полезен для устранения неполадок.
Нажмите Save.
2.5. Добавьте новую джобу в ТестОпс
Самый простой и надежный способ создать джобу в ТестОпс — запустить сборку в TeamCity один раз, загрузить результаты тестов в ТестОпс и затем закрыть созданный запуск.
ТестОпс автоматически создаст джобу для конфигурации сборки в TeamCity. Затем вам нужно будет настроить атрибуты, описанные в шаге 3 ниже.
Чтобы создать новую джобу вручную:
Перейдите в ваш проект в ТестОпс.
Перейдите в раздел Джобы.
Нажмите + Джоба в правом верхнем углу страницы.
В появившемся окне заполните поля:
- Сервер сборки — название инстанса TeamCity, который вы добавили на шаге 1.2.
- Может запускать тесты — если отмечено, пользователи смогут запускать эту джобу из интерфейса ТестОпс.
- Джоба — название конфигурации сборки TeamCity. Обратите внимание, что вы не можете добавить одну и ту же конфигурацию сборки в ТестОпс дважды.
- Параметры — параметры, которые должны быть переданы в TeamCity через переменные окружения, см. Окружение.
Нажмите Отправить.
3. Параметризуйте джобы TeamCity
Сборки TeamCity могут принимать параметры сборки. ТестОпс интегрирует эту функцию с собственной концепцией Окружение, что позволяет вам как задавать параметры для новых джоб, так и видеть параметры, установленные для джоб, запущенных вне ТестОпс.
Обратите внимание, что рекомендуется устанавливать одинаковые значения по умолчанию как в ТестОпс, так и в TeamCity. В таком случае сборка TeamCity получит одно и то же окружение независимо от источника запуска.
Важно
Если в репозитории вашего проекта есть несколько веток, обязательно создайте переменную окружения Branch в ТестОпс и передайте ее в вашу джобу. Это специальное имя укажет TeamCity, какую из веток плана он должен запустить.
3.1. Установите значения по умолчанию в TeamCity
На главной странице TeamCity перейдите на страницу настроек вашей сборки.
В правом верхнем углу нажмите Edit configuration.
В меню слева нажмите Parameters.
(Если ссылка не видна, нажмите Show all, чтобы раскрыть ее.)
Для каждого параметра, который вы хотите добавить, нажмите Add new parameter и заполните поля:
- Name — название переменной.
- Kind — Environment variable. Обратите внимание, что это автоматически добавляет префикс
env.
к названию переменной. - Value — значение по умолчанию, которое должно использоваться, если не указано для конкретного запуска.
Нажмите Save, чтобы сохранить новый параметр.
3.2. Добавьте глобальные названия параметров в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Окружение.
Для каждого параметра, который вы хотите добавить, нажмите + Создать, введите название параметра и нажмите Отправить.
Обратите внимание, что это название может быть человекочитаемым и не обязательно должно совпадать с названием из шага 3.1.
3.3. Сопоставьте параметры с переменными окружения в ТестОпс
Перейдите в ваш проект в ТестОпс.
Перейдите в раздел Настройки → Окружение.
Для каждого параметра, который вы хотите использовать:
- Нажмите + Создать, если параметра нет в списке. Если параметр уже существует, нажмите значок Редактировать рядом с его названием.
- В поле Ключ укажите название переменной окружения из шага 3.1.
- В поле Переменная окружения выберите глобальное название параметра из шага 3.2.
- Нажмите Отправить.
3.4. Загрузите параметры в джобу ТестОпс
Перейдите в раздел Джобы.
Найдите джобу, которую хотите параметризовать. Нажмите Обновить справа от нее.
Названия параметров и их значения по умолчанию должны появиться в описании джобы.
Нажмите
⋯
и выберите Настроить.Появится окно настроек джобы, содержащее раздел Параметры.
Для каждого параметра, который вы хотите использовать, выберите соответствующую Переменную окружения из шага 3.2.
Нажмите Отправить.
Справочник по Kotlin DSL
Если вы используете подход «Конфигурация как код» и храните конфигурацию сборки в скрипте Kotlin DSL, вам нужно добавить настройки для интеграции с ТестОпс в ваш файл .teamcity/settings.kts.
Настройки на уровне проекта
Настройки на уровне проекта должны содержаться в блоке feature
с указанным свойством type
со значением io.qameta.allure.teamcity.AllureServerConfig
. Все остальные настройки в блоке задаются с помощью функции param()
.
Поддерживаются следующие настройки:
- allure.server.config.id — уникальный идентификатор инстанса. Рекомендуется использовать UUID.
- allure.server.config.name — название, которое поможет вам распознать инстанс ТестОпс, например, TestOps production.
- allure.server.config.url — URL-адрес инстанса ТестОпс, например, https://testops.example.com.
- allure.server.config.token — API-токен, который вы получили на шаге 2.1.
- allure.server.config.threadsCount — максимальное количество потоков для загрузки файлов на инстанс.
- allure.server.config.batchSize — максимальное количество файлов для загрузки на инстанс за один раз (одним потоком).
- allure.server.config.maxDepth — количество уровней подкаталогов в директории результатов тестов для сканирования и загрузки. "0" означает, что подкаталоги не будут загружены.
- allure.server.config.processInterval — минимальный интервал (в секундах) между отправкой наборов файлов (одним потоком).
- allure.server.config.indexInterval — интервал (в секундах) между сканированием директории с результатами тестов.
- allure.server.config.delayInterval — минимальный интервал (в секундах) перед загрузкой вновь созданного файла (чтобы избежать загрузки наполовину записанных файлов).
Вот пример project
с рабочей конфигурацией:
kotlin
project {
vcsRoot(ExampleProject_VcsRoot)
buildType(ExampleBuildConfiguration)
features {
feature {
type = "io.qameta.allure.teamcity.AllureServerConfig"
param("allure.server.config.id", "7040a01f-dadf-4d3b-b449-f8f227cb2f79")
param("allure.server.config.name", "TestOps production")
param("allure.server.config.url", "http://testops.example.com/")
param("allure.server.config.token", "8d7e66eb-0bac-4dcf-9828-446a818f4d8c")
param("allure.server.config.threadsCount", "5")
param("allure.server.config.batchSize", "10")
param("allure.server.config.maxDepth", "1")
param("allure.server.config.processInterval", "2")
param("allure.server.config.indexInterval", "1")
param("allure.server.config.delayInterval", "5")
}
}
}
Настройки на уровне конфигурации сборки
Настройки на уровне конфигурации сборки должны содержаться в блоке feature
с указанным свойством type
со значением allure.serverBuildFeature
. Все остальные настройки в блоке задаются с помощью функции param()
.
Поддерживаются следующие настройки:
- allure.server.id — идентификатор инстанса (такой же, как allure.server.config.id в Настройках на уровне проекта).
- project.id — идентификатор проекта в ТестОпс.
- allure.server.launch.name — шаблон для именования запусков тестов. Здесь вы можете использовать предопределенные параметры сборки TeamCity.
- allure.server.launch.tags — список тегов, которые должны быть присвоены запуску тестов (через запятую).
- allure.result.directory — путь к директории результатов тестов, например, build/allure-results. Если в вашем проекте несколько директорий с результатами тестов, вы можете разделить их запятыми или новыми строками, или использовать шаблон с подстановочными символами, например, modules/*/build/allure-results.
- allure.indexExistingFiles — если отмечено, плагин не будет загружать файлы, которые не были созданы или изменены джобой.
- allure.debug.enable — если отмечено, плагин будет выводить больше деталей в журнал сборки. Такой журнал может быть полезен для устранения неполадок.
Вот пример BuildType
с рабочими настройками:
kotlin
object ExampleBuildConfiguration : BuildType({
id = AbsoluteId("ExampleBuildConfiguration")
name = "Example Build Configuration"
vcs {
root(DslContext.settingsRoot)
}
steps {
gradle {
tasks = "clean test"
}
}
triggers {
vcs {
}
}
features {
feature {
type = "allure.serverBuildFeature"
param("allure.server.id", "7040a01f-dadf-4d3b-b449-f8f227cb2f79")
param("project.id", "1")
param("allure.server.launch.name", "%env.TEAMCITY_BUILDCONF_NAME% - #%env.BUILD_NUMBER%")
param("allure.server.launch.tags", "tests,teamcity")
param("allure.result.directory", "build/allure-results")
param("allure.indexExistingFiles", "true")
param("allure.debug.enable", "true")
}
}
})