Интеграция с Tekton
Интеграция с Tekton позволяет:
- автоматически передавать результаты тестов из пайплайна Tekton в ТестОпс с помощью allurectl;
- запускать пайплайн Tekton из интерфейса ТестОпс через запуск джобы ТестОпс;
- синхронизировать статус запуска пайплайна сразу в обеих системах — ТестОпс и Tekton.
В настроенной интеграции одна джоба ТестОпс соответствует одному пайплайну Tekton, а один запуск джобы ТестОпс — одному запуску соответствующего пайплайна.
Примечание
Чтобы настроить или удалить любую интеграцию ТестОпс с внешней системой, необходима глобальная роль «Администратор» в инстансе ТестОпс и, как правило, права администратора инстанса внешней системы.
Настройка интеграции и подключений с Tekton
Чтобы настроить интеграцию с Tekton:
Настройте связь от ТестОпс к Tekton:
- Создайте Bearer-токен для доступа ТестОпс к Tekton.
- Подключите интеграцию с Tekton на уровне инстанса ТестОпс.
- Добавьте настроенное подключение к Tekton в проект ТестОпс.
Настройте связь от Tekton к ТестОпс:
- Создайте API-токен в ТестОпс.
- Настройте таск в Tekton для загрузки результатов тестов в ТестОпс.
- Настройте пайплайн в Tekton для загрузки результатов тестов в ТестОпс.
- Запустите и проверьте пайплайн в Tekton.
- Настройте созданную джобу в ТестОпс.
Параметризируйте джобу в ТестОпс и пайплайн в Tekton (при необходимости).
1. Настройте связь от ТестОпс к Tekton
1.1. Создайте Bearer-токен для доступа ТестОпс к Tekton
Чтобы создать Bearer-токен для Tekton, воспользуйтесь одним из способов в зависимости от типа развертывания Tekton в вашем кластере Kubernetes:
При стандартном развертывании Tekton (Tekton Pipelines, Triggers и Results) ТестОпс будет взаимодействовать напрямую с Kubernetes API кластера. Для этого создайте сервисную учетную запись с правами на управление ресурсами Tekton и сгенерируйте для нее токен:
Создайте сервисную учетную запись в пространстве имен (namespace) Kubernetes, где запущен Tekton:
bashkubectl create serviceaccount <название_сервисной_учетной_записи> -n <название_namespace>Пример
bashkubectl create serviceaccount testops-tekton -n tekton-pipelinesСоздайте роль с минимально необходимыми правами для запуска и мониторинга пайплайнов:
bashkubectl create role <название_роли> -n <название_namespace> \ --verb=get,list,create,patch \ --resource=pipelines.tekton.dev,pipelineruns.tekton.devПример
bashkubectl create role testops-tekton-role -n tekton-pipelines \ --verb=get,list,create,patch \ --resource=pipelines.tekton.dev,pipelineruns.tekton.devПривяжите роль к созданной сервисной учетной записи:
bashkubectl create rolebinding <название_связи> -n <название_namespace> \ --role=<название_роли> \ --serviceaccount=<название_namespace>:<название_сервисной_учетной_записи>Пример
bashkubectl create rolebinding testops-tekton-binding -n tekton-pipelines \ --role=testops-tekton-role \ --serviceaccount=tekton-pipelines:testops-tektonСоздайте Bearer-токен:
bashkubectl create token <название_сервисной_учетной_записи> -n <название_namespace> --duration=<срок_действия>Важно
По умолчанию
kubectl create tokenвыпускает токен со сроком действия 1 час. Для долгосрочной интеграции явно укажите нужный срок через флаг--duration(например,8760h— один год).Пример
bashkubectl create token testops-tekton -n tekton-pipelines --duration=8760hСкопируйте и сохраните токен в безопасном месте, он понадобится для подключения интеграции с Tekton в ТестОпс.
1.2. Подключите интеграцию с Tekton на уровне инстанса ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Интеграции.
Нажмите Добавить интеграцию.
В списке доступных интеграций выберите Tekton.
Заполните поля:
Название подключения — введите название, которое поможет вам распознать интеграцию (например, Tekton production).
Endpoint — введите URL-адрес вашего инстанса Tekton (например, https://example.tekton.com).
Тип учетных данных — нажмите на выпадающий список и выберите тип учетных данных Tekton, который будет поддерживать интеграция:
- Все (глобальные и проектные) — интеграция может работать как с глобальными, так и с проектными учетными данными;
- Только глобальные — интеграция может работать только с глобальными учетными данными;
- Только проектные — интеграция может работать только с проектными учетными данными.
Примечание
Подробнее о поддерживаемых типах учетных данных см. Интеграции с внешними системами → Глобальные и проектные учетные данные
Если ваш инстанс Tekton использует самоподписанный SSL-сертификат, уберите галочку напротив Проверка SSL-сертификата.
Если интеграция может работать с глобальными учетными данными Tekton, в секции Глобальные учетные данные введите Bearer-токен, который вы получили на шаге 1.1.
Нажмите Добавить подключение.
В разделе Администрирование → Интеграции появится интеграция с Tekton с одним автоматически созданным подключением.
1.3. Добавьте настроенное подключение к Tekton в проект ТестОпс
Чтобы добавить настроенное подключение к Tekton в нужный проект ТестОпс, воспользуйтесь одним из способов:
В ТестОпс перейдите в раздел Администрирование → Интеграции.
В списке настроенных интеграций найдите и откройте интеграцию с Tekton.
В списке настроенных подключений найдите и откройте ваше подключение к Tekton.
Нажмите Добавить в проект.
В списке доступных проектов выберите нужный проект ТестОпс.
Если интеграция может работать и с глобальными, и с проектными учетными данными Tekton, в поле Тип учетных данных нажмите на выпадающий список и выберите вариант, который будет использоваться в проекте:
- Проектные — использовать проектные учетные данные для подключения к Tekton;
- Глобальные — использовать глобальные учетные данные для подключения к Tekton.
Если интеграция будет работать с проектными учетными данными Tekton, в секции Проектные учетные данные введите Bearer-токен, который вы получили на шаге 1.1.
Нажмите Добавить в проект.
2. Настройте связь от Tekton к ТестОпс
Выполните шаги ниже, чтобы настроить вторую часть двусторонней связи: отправку статусов пайплайнов и результатов тестов из Tekton в ТестОпс.
Примечание
В примерах ниже используются Java JUnit5 и Gradle. Примеры написаны для API tekton.dev/v1 (стабильный API для Tekton Pipelines версии 0.44.0 и выше). Если ваш кластер использует более старую версию Tekton Pipelines (до 0.44.0), замените значение поля apiVersion на tekton.dev/v1beta1.
2.1. Создайте API-токен в ТестОпс
В ТестОпс нажмите на ваш аватар и перейдите в раздел API-токены.
Нажмите + Токен.
Введите название токена, которое поможет вам распознать интеграцию (например, Токен для Tekton).
Нажмите Создать.
ТестОпс сгенерирует токен и отобразит его в модальном окне.
Нажмите иконку Копировать, чтобы скопировать токен в буфер обмена.
Сохраните токен в безопасном месте, он понадобится для настройки интеграции в Tekton.
Нажмите Готово.
2.2. Настройте таск в Tekton для загрузки результатов тестов в ТестОпс
Перейдите в рабочую директорию Tekton.
Создайте файл для определения таска Tekton (например, testops-example-test-task.yaml).
Добавьте в созданный файл конфигурацию по образцу:
yamlapiVersion: tekton.dev/v1 kind: Task metadata: name: testops-example-test spec: params: - name: ALLURE_JOB_RUN_ID type: string - name: namespace type: string - name: pipelineName type: string - name: pipelineRunName type: string steps: - name: test image: gradle:jdk8 script: | git clone https://github.com/reponame/testops-example.git && cd testops-example wget -q -O ./allurectl https://github.com/allure-framework/allurectl/releases/latest/download/allurectl_linux_amd64 && chmod +x ./allurectl ./allurectl watch -- ./gradlew clean test securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false capabilities: drop: - ALL seccompProfile: type: RuntimeDefault env: - name: ALLURE_ENDPOINT value: "<URL_адрес_инстанса_ТестОпс>" - name: ALLURE_TOKEN value: "<API_токен_из_ТестОпс>" - name: ALLURE_PROJECT_ID value: "<ID_проекта_ТестОпс>" - name: ALLURE_CI_TYPE value: "tekton" - name: ALLURE_LAUNCH_NAME value: "$(params.pipelineName) - $(params.pipelineRunName)" - name: ALLURE_JOB_URL value: "<URL_адрес_инстанса_Tekton>/#/namespaces/$(params.namespace)/pipelines/$(params.pipelineName)" - name: ALLURE_JOB_UID value: "$(params.namespace)/$(params.pipelineName)" - name: ALLURE_JOB_NAME value: "$(params.pipelineName)" - name: ALLURE_JOB_RUN_ID value: "$(params.ALLURE_JOB_RUN_ID)" - name: ALLURE_JOB_RUN_URL value: "<URL_адрес_инстанса_Tekton>/#/namespaces/$(params.namespace)/pipelineruns/$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_UID value: "$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_NAME value: "$(params.pipelineRunName)" - name: ALLURE_RESULTS value: "<путь_к_результатам_тестов>"где:
ALLURE_ENDPOINT— URL-адрес инстанса ТестОпс;ALLURE_TOKEN— API-токен ТестОпс, который вы получили на шаге 2.1;ALLURE_PROJECT_ID— ID проекта ТестОпс;ALLURE_RESULTS— путь к директории с результатами тестов (например, build/allure-results);ALLURE_CI_TYPE— тип CI-системы (всегда tekton);ALLURE_JOB_RUN_ID— ID запуска в ТестОпс, передается из параметров пайплайна;ALLURE_LAUNCH_NAME— название запуска в ТестОпс;ALLURE_JOB_URL— ссылка на пайплайн в Tekton;ALLURE_JOB_UID— уникальный идентификатор пайплайна в Tekton;ALLURE_JOB_NAME— название пайплайна в Tekton;ALLURE_JOB_RUN_URL— ссылка на конкретный запуск пайплайна в Tekton;ALLURE_JOB_RUN_UID— уникальный идентификатор запуска пайплайна в Tekton;ALLURE_JOB_RUN_NAME— название запуска пайплайна в Tekton.
Важно
Обязательные переменные для загрузки результатов тестов из Tekton в ТестОпс:
ALLURE_ENDPOINT,ALLURE_TOKEN,ALLURE_PROJECT_ID,ALLURE_RESULTS,ALLURE_CI_TYPEиALLURE_JOB_RUN_ID.Остальные переменные необязательны, но рекомендуются для правильного отображения ссылок на пайплайны и связывания запусков между ТестОпс и Tekton.
Пример изменения файла с таском
yamlapiVersion: tekton.dev/v1 kind: Task metadata: name: testops-example-test spec: params: - name: ALLURE_JOB_RUN_ID type: string - name: namespace type: string - name: pipelineName type: string - name: pipelineRunName type: string steps: - name: test image: gradle:jdk8 script: | git clone https://github.com/reponame/testops-example.git && cd testops-example wget -q -O ./allurectl https://github.com/allure-framework/allurectl/releases/latest/download/allurectl_linux_amd64 && chmod +x ./allurectl ./allurectl watch -- ./gradlew clean test securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false capabilities: drop: - ALL seccompProfile: type: RuntimeDefault env: - name: ALLURE_ENDPOINT value: "https://testops.example.com" - name: ALLURE_TOKEN value: "55555555-5555-5555-5555-555555555555" - name: ALLURE_PROJECT_ID value: "1" - name: ALLURE_CI_TYPE value: "tekton" - name: ALLURE_LAUNCH_NAME value: "$(params.pipelineName) - $(params.pipelineRunName)" - name: ALLURE_JOB_URL value: "https://example.tekton.com/#/namespaces/$(params.namespace)/pipelines/$(params.pipelineName)" - name: ALLURE_JOB_UID value: "$(params.namespace)/$(params.pipelineName)" - name: ALLURE_JOB_NAME value: "$(params.pipelineName)" - name: ALLURE_JOB_RUN_ID value: "$(params.ALLURE_JOB_RUN_ID)" - name: ALLURE_JOB_RUN_URL value: "https://example.tekton.com/#/namespaces/$(params.namespace)/pipelineruns/$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_UID value: "$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_NAME value: "$(params.pipelineRunName)" - name: ALLURE_RESULTS value: "build/allure-results"Примените изменения из таска Tekton в кластер Kubernetes:
bashkubectl apply -f testops-example-test-task.yaml
2.3. Настройте пайплайн в Tekton для загрузки результатов тестов в ТестОпс
В рабочей директории Tekton создайте файл для определения пайплайна Tekton (например, testops-example-pipeline.yaml).
Добавьте в созданный файл описание пайплайна, который вызывает таск из шага 2.2 и передает в него параметр
ALLURE_JOB_RUN_IDвместе с контекстом запуска, по образцу:yamlapiVersion: tekton.dev/v1 kind: Pipeline metadata: name: testops-example spec: params: - description: TestOps Job Run ID name: ALLURE_JOB_RUN_ID type: string default: "" tasks: - name: test taskRef: name: testops-example-test params: - name: ALLURE_JOB_RUN_ID value: "$(params.ALLURE_JOB_RUN_ID)" - name: pipelineName value: "$(context.pipeline.name)" - name: pipelineRunName value: "$(context.pipelineRun.name)" - name: namespace value: "$(context.pipelineRun.namespace)"Примените изменения из пайплайна Tekton в кластер Kubernetes:
bashkubectl apply -f testops-example-pipeline.yaml
2.4. Запустите и проверьте пайплайн в Tekton
В рабочей директории Tekton создайте файл с описанием запуска пайплайна (PipelineRun) из шага 2.3 (например, testops-example-pipelinerun.yaml) по образцу:
yamlapiVersion: tekton.dev/v1 kind: PipelineRun metadata: generateName: testops-example-run- namespace: tekton-pipelines spec: pipelineRef: name: testops-example params: - name: ALLURE_JOB_RUN_ID value: "" serviceAccountName: default podTemplate: securityContext: runAsNonRoot: true runAsUser: 1000 fsGroup: 1000 seccompProfile: type: RuntimeDefaultЗапустите пайплайн:
bashkubectl create -f testops-example-pipelinerun.yamlПроверьте статус запуска пайплайна:
bashkubectl get pipelineruns -n tekton-pipelines
Примечание
Подробнее о Tekton PipelineRuns см. в официальной документации Tekton.
После первого успешного запуска пайплайна Tekton в проекте ТестОпс появится новая джоба, соответствующая этому пайплайну.
2.5. Настройте джобу в ТестОпс
Перейдите в ваш проект ТестОпс.
Перейдите в раздел Джобы.
В списке будет отображаться новая джоба, автоматически добавленная во время запуска на шаге 2.4.
Напротив добавленной джобы нажмите
⋯→ Настроить.В появившемся окне заполните поля:
- Название — введите название, которое поможет вам распознать джобу.
- Сервер сборки — нажмите на выпадающий список и выберите название подключения к Tekton, которое вы добавили на шаге 1.3.
- Джоба может быть использована для запуска тестов — поставьте галочку, чтобы пользователи могли запускать пайплайн из ТестОпс.
Нажмите Отправить.
3. Параметризируйте джобу в ТестОпс и пайплайн в Tekton
Пайплайны Tekton поддерживают параметризацию — возможность передавать переменные при запуске пайплайна. ТестОпс поддерживает эту функциональную возможность через Окружение, которое позволяет задавать параметры для новых джоб ТестОпс и просматривать параметры из пайплайнов, запущенных со стороны Tekton.
3.1. Укажите параметры в пайплайне Tekton
Чтобы добавить параметры в пайплайн Tekton, отредактируйте файлы определения пайплайна и таска:
В файле определения пайплайна, созданном на шаге 2.3:
- добавьте новые параметры в блок
spec.paramsс указанием значений по умолчанию; - добавьте эти же параметры в блок
tasks.params, чтобы передать их в таск.
Пример изменения пайплайна
yamlapiVersion: tekton.dev/v1 kind: Pipeline metadata: name: testops-example spec: params: - description: TestOps Job Run ID name: ALLURE_JOB_RUN_ID type: string default: "" - description: Product version name: PRODUCT_VERSION type: string default: "1.23" - description: Browser for tests name: TESTS_BROWSER type: string default: "chrome" tasks: - name: test taskRef: name: testops-example-test params: - name: ALLURE_JOB_RUN_ID value: "$(params.ALLURE_JOB_RUN_ID)" - name: PRODUCT_VERSION value: "$(params.PRODUCT_VERSION)" - name: TESTS_BROWSER value: "$(params.TESTS_BROWSER)" - name: pipelineName value: "$(context.pipeline.name)" - name: pipelineRunName value: "$(context.pipelineRun.name)" - name: namespace value: "$(context.pipelineRun.namespace)"- добавьте новые параметры в блок
В файле определения таска, созданном на шаге 2.2:
- добавьте новые параметры в блок
spec.params; - добавьте эти же параметры как переменные окружения в блок
env, чтобы allurectl мог получить к ним доступ.
Пример изменения таска
yamlapiVersion: tekton.dev/v1 kind: Task metadata: name: testops-example-test spec: params: - name: ALLURE_JOB_RUN_ID type: string - name: PRODUCT_VERSION type: string - name: TESTS_BROWSER type: string - name: namespace type: string - name: pipelineName type: string - name: pipelineRunName type: string steps: - name: test image: gradle:jdk8 script: | git clone https://github.com/reponame/testops-example.git && cd testops-example wget -q -O ./allurectl https://github.com/allure-framework/allurectl/releases/latest/download/allurectl_linux_amd64 && chmod +x ./allurectl ./allurectl watch -- ./gradlew clean test securityContext: runAsNonRoot: true runAsUser: 1000 allowPrivilegeEscalation: false capabilities: drop: - ALL seccompProfile: type: RuntimeDefault env: - name: ALLURE_ENDPOINT value: "https://testops.example.com" - name: ALLURE_TOKEN value: "55555555-5555-5555-5555-555555555555" - name: ALLURE_PROJECT_ID value: "1" - name: ALLURE_CI_TYPE value: "tekton" - name: ALLURE_LAUNCH_NAME value: "$(params.pipelineName) - $(params.pipelineRunName)" - name: ALLURE_JOB_URL value: "https://example.tekton.com/#/namespaces/$(params.namespace)/pipelines/$(params.pipelineName)" - name: ALLURE_JOB_UID value: "$(params.namespace)/$(params.pipelineName)" - name: ALLURE_JOB_NAME value: "$(params.pipelineName)" - name: ALLURE_JOB_RUN_ID value: "$(params.ALLURE_JOB_RUN_ID)" - name: ALLURE_JOB_RUN_URL value: "https://example.tekton.com/#/namespaces/$(params.namespace)/pipelineruns/$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_UID value: "$(params.pipelineRunName)" - name: ALLURE_JOB_RUN_NAME value: "$(params.pipelineRunName)" - name: ALLURE_RESULTS value: "build/allure-results" - name: PRODUCT_VERSION value: "$(params.PRODUCT_VERSION)" - name: TESTS_BROWSER value: "$(params.TESTS_BROWSER)"- добавьте новые параметры в блок
Примените обновленные конфигурации:
bashkubectl apply -f testops-example-test-task.yaml kubectl apply -f testops-example-pipeline.yaml
3.2. Добавьте глобальные переменные окружения в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Окружения.
Для каждой переменной, которую вы хотите добавить:
- Нажмите + Создать.
- Введите глобальное название переменной.
- Нажмите Отправить.
3.3. Сопоставьте параметры пайплайна с глобальными переменными окружения в ТестОпс
Перейдите в ваш проект ТестОпс.
Перейдите в раздел Настройки → Окружение.
Для каждого параметра, который вы хотите использовать:
- Нажмите + Создать, если параметра нет в списке. Если параметр уже существует, напротив его названия нажмите иконку Редактировать.
- В поле Ключ введите название параметра пайплайна из шага 3.1.
- В поле Переменная окружения нажмите на выпадающий список и выберите глобальное название переменной в ТестОпс из шага 3.2.
- Нажмите Отправить.
3.4. Добавьте параметры в джобу ТестОпс
Перейдите в раздел Джобы.
Напротив джобы, которую вы хотите параметризовать, нажмите
⋯→ Настроить.Для каждого параметра, который вы хотите использовать, в секции Параметры нажмите Добавить и заполните поля:
Нажмите Отправить.
Удаление подключений и интеграции с Tekton
Вы можете удалить подключение к интеграции с Tekton двумя способами — на уровне отдельного проекта (через настройки проекта) или на уровне всего инстанса ТестОпс (через раздел Администрирование).
Удаление подключения на уровне проекта
Важно
Последствия удаления всех подключений из интеграции с Tekton на уровне проекта:
Подключения к интеграции с Tekton перестанут отображаться в списке подключений проекта, но продолжат работать в других проектах инстанса, в которых они были добавлены, и сохранятся в разделе Администрирование → Интеграции.
Интеграция с Tekton перестанет отображаться в списке интеграций проекта, но сохранится в разделе Администрирование → Интеграции.
Связь с инстансом Tekton будет удалена из джоб ТестОпс, которые относятся к интеграции и находятся в этом проекте:
- Иконки для запуска и обновления этих джоб в разделе Джобы останутся активными.
- ТестОпс не сможет запустить тесты из проекта на стороне Tekton. После закрытия запуска результаты этих тестов получат статус «Неизвестный».
- Результаты запусков тестов из Tekton не будут отправляться в проект ТестОпс.
Чтобы удалить подключение на уровне проекта:
- Перейдите в ваш проект ТестОпс.
- Перейдите в раздел Настройки → Интеграции.
- В списке настроенных интеграций найдите и откройте интеграцию с Tekton.
- Напротив нужного подключения к Tekton нажмите
⋯→ Удалить → Да, удалить.
Подключение перестанет работать в вашем проекте.
Удаление подключения на уровне инстанса
Важно
Последствия удаления всех подключений из интеграции с Tekton на уровне инстанса:
Подключения и интеграция с Tekton будут полностью удалены.
Связь с инстансом Tekton будет удалена из всех джоб ТестОпс, которые относятся к интеграции:
- Иконки для запуска и обновления этих джоб в разделе Джобы станут неактивными.
- Результаты запусков тестов из Tekton не будут отправляться в инстанс ТестОпс.
Чтобы удалить подключение на уровне инстанса:
- В ТестОпс перейдите в раздел Администрирование → Интеграции.
- В списке настроенных интеграций найдите и откройте интеграцию с Tekton.
- В списке настроенных подключений откройте карточку нужного подключения и напротив названия каждого проекта нажмите
⋯→ Удалить из проекта → Да, удалить. - Нажмите Назад в интеграцию, чтобы вернуться к списку подключений.
- Напротив нужного подключения к Tekton нажмите
⋯→ Удалить → Да, удалить.
Подключение перестанет работать во всех проектах инстанса.

