Интеграция Pipeline
Содержание
ОбзорЧто такое Pipeline IntegrationКлючевые поля Pipeline IntegrationХранение в аннотацияхСтруктура Pipeline IntegrationNameСсылка на ResourceInterfaceСсылка на ConnectorПараметрыАтрибутыWorkspaceПоддержка интеграции TaskПримерыСсылкиОбзор
При построении CI/CD pipeline с Tekton разработчикам часто требуется интеграция с внешними ресурсами, такими как Git repositories, container registries и artifact repositories. Традиционно это требует ручной настройки URL, учетных данных и параметров для каждого внешнего инструмента, что подвержено ошибкам и занимает много времени.
Интеграция Tekton Pipelines с Connectors решает эту проблему, предоставляя стандартизированный способ подключения внешних ресурсов к workflow pipeline. Такая интеграция обеспечивает:
- Простой просмотр и выбор ресурсов: просмотр и добавление внешних ресурсов, таких как Git repositories, Git Revision, OCI repositories и другие ресурсы, с помощью UI вместо ручного ввода
- Единые атрибуты ресурса: обработка разнесенных атрибутов одного и того же удаленного ресурса как единого целого, что устраняет необходимость настраивать отдельные параметры
urlиrevisionвместе с конфигурацией workspace - Упрощенная настройка workspace: быстрая настройка workspace с подходящими connectors и понятными указаниями, какой тип connector подходит для каждого workspace
- Сохранение гибкости: сохранение текущего опыта оркестрации и выполнения pipeline при добавлении мощных возможностей connectors
Что такое Pipeline Integration
Pipeline Integration — это механизм, который связывает внешние ресурсы (через Connectors и ResourceInterfaces) с Tekton Tasks и Pipelines. Он определяет:
- Какой ресурс и какой connector использовать в workflow pipeline
- Конфигурацию параметров, требуемую для ресурса
- Сопоставление атрибутов между выходными данными ресурса и параметрами pipeline
- Сопоставление workspace для volumes и учетных данных
PipelineIntegration — это не фактический ресурс Kubernetes, а метаданные интеграции, хранимые в аннотациях Tekton Pipeline или Task с использованием ключа integrations.tekton.dev/integrations.
В этом документе описаны концепции и ключевые поля Pipeline Integration. Если вы хотите интегрировать connectors в свой пользовательский pipeline или task, вам следует ознакомиться с деталями, приведенными в этом документе.
Встроенные компоненты Pipeline и Task уже поддерживают Pipeline Integration, поэтому вы можете использовать их напрямую без какой-либо дополнительной настройки.
Ключевые поля Pipeline Integration
Pipeline Integration содержит следующие ключевые поля:
- Ссылка на ResourceInterface: определяет, какой ResourceInterface использовать (по категории или по имени)
- Ссылка на Connector: указывает, какой экземпляр Connector предоставляет ресурс
- Конфигурация параметров: входные параметры, требуемые ResourceInterface
- Сопоставление атрибутов: как атрибуты ресурса сопоставляются с параметрами pipeline/task
- Сопоставление workspace: как workspace ресурса сопоставляются с workspace pipeline
Хранение в аннотациях
Метаданные интеграции хранятся с использованием аннотации integrations.tekton.dev/integrations в виде массива YAML:
Структура Pipeline Integration
Name
Имя pipeline integration.
Ссылка на ResourceInterface
Указывает, какой ResourceInterface использовать. Поддерживаются ссылки как по категории, так и по имени:
Ссылка по категории (гибкая, работает с любым совместимым connector):
все имена категорий определены в метках ResourceInterface с именем resourceinterface.connectors.cpaas.io/category.
Ссылка по имени (конкретный интерфейс):
Когда использовать каждый подход:
- Используйте ссылку по категории для повторно используемых pipeline, которые должны работать с разными реализациями resourceinterfaces
- Используйте ссылку по имени для pipeline, которым требуется конкретное имя resourceinterface.
Ссылка на Connector
Указывает, какой экземпляр Connector использовать для доступа к внешнему ресурсу:
Параметры конфигурации:
- Фиксированный Connector: задайте
nameиnamespace, аsetAtRuntimeоставьте равнымfalseили опустите его - Выбор во время выполнения: задайте
setAtRuntime: true, чтобы разрешить выбор connector во время выполнения pipeline - По умолчанию с переопределением: укажите
nameи задайтеsetAtRuntime: true, чтобы использовать значение по умолчанию с возможностью переопределения во время выполнения
Параметры
Входные параметры, требуемые ResourceInterface. Эти параметры используются для вычисления атрибутов ресурса:
Поведение параметров:
- Если
setAtRuntime: true, параметр должен быть указан при выполнении pipeline - Если
setAtRuntime: falseили значение опущено, параметр использует фиксированноеvalue - Для параметров без
value, но сsetAtRuntime: true, требуется ввод пользователя во время выполнения
Атрибуты
Выходные атрибуты, вычисляемые на основе параметров и информации о connector, а также их сопоставление с параметрами pipeline:
Конфигурация атрибутов:
- Имя атрибута должно соответствовать
ResourceInterface.spec.attributes[].name - Значение атрибута вычисляется с использованием выражения, определенного в
ResourceInterface.spec.attributes[].expression - Параметризованные атрибуты создают параметры pipeline (указываются в поле
param) - Статические атрибуты используют фиксированные значения (указываются в поле
value) - transform при необходимости корректирует вычисленное значение атрибута перед сопоставлением:
prefix: добавляет префикс к значению атрибутаsuffix: добавляет суффикс к значению атрибутаaccessor: выбирает подзначение из структурированного атрибута:- для массивов используйте индекс (например,
"0") - для объектов используйте имя поля (например,
"repository") - после выбора подзначения с помощью
accessorрезультирующее значение атрибута преобразуется вstring
- для массивов используйте индекс (например,
- refPath определяет, где используется значение атрибута в задачах pipeline
Краткий пример (transform)
Если вычисленное значение artifacts равно ["registry.example.com/team/app"], это сопоставление использует первый элемент и формирует oci://registry.example.com/team/app-prod.
- Используйте
accessor, когда атрибут является массивом/объектом и вам нужен только один элемент/поле. - Используйте
prefix, когда downstream task ожидает фиксированный протокол или буквальный префикс (например,oci://). - Используйте
suffix, когда downstream task требуется фиксированный постфикс, например маркер среды (например,-prod).
Workspace
Сопоставление workspace между workspace ResourceInterface и workspace pipeline:
Конфигурация Workspace:
- Имя workspace должно соответствовать
ResourceInterface.spec.workspaces[].name - Pipeline workspace автоматически создается с именем, заданным в поле
workspace, а значение по умолчанию берется изResourceInterface.spec.workspaces[].workspaceMapping.name. - refPath определяет, какой workspace какого pipelinetask использует этот workspace.
Поддержка интеграции Task
Tasks могут объявлять поддержку интеграции, чтобы включить автоматическое сопоставление параметров и workspace:
Примеры
Revision задается во время выполнения
- connector и repository заданы фиксированными значениями, revision задается во время выполнения.
- используется фиксированное значение
https://github.com/myorg/myapp.gitв параметре url задачи git-clone. - используется параметр времени выполнения
$(params.revision)в параметре revision задачи git-clone. - используется workspace
source-workspaceв workspace source задачи git-clone.
Например:
Connector, repository и revision задаются во время выполнения
- connector, repository и revision задаются во время выполнения.
- используется параметр времени выполнения
$(params.git-url)в параметре url задачи git-clone. - используется параметр времени выполнения
$(params.git-revision)в параметре revision задачи git-clone. - используется workspace
source-workspaceв workspace source задачи git-clone.
Например: