• Русский
  • Интеграция Pipeline

    Обзор

    При построении CI/CD pipeline с Tekton разработчикам часто требуется интеграция с внешними ресурсами, такими как Git-репозитории, контейнерные registry и artifact-репозитории. Традиционно для этого требуется вручную настраивать URL, учетные данные и параметры для каждого внешнего инструмента, что чревато ошибками и занимает много времени.

    Интеграция Tekton Pipelines с Connectors решает эту проблему, предоставляя стандартизированный способ подключения внешних ресурсов к workflow pipeline. Эта интеграция позволяет:

    • Простой просмотр и выбор ресурсов: просматривайте и добавляйте внешние ресурсы, такие как Git-репозитории, Git Revision, OCI-репозитории и другие ресурсы, с помощью интерфейса, а не вручную
    • Единые атрибуты ресурса: обрабатывайте разделенные атрибуты одного и того же удаленного ресурса как единое целое, избавляясь от необходимости настраивать отдельные параметры url и revision, а также конфигурации workspace
    • Упрощенная настройка workspace: быстрая настройка workspace с подходящими connectors и понятные рекомендации по выбору типа connector для каждого workspace
    • Сохранение гибкости: сохраняйте текущий опыт оркестрации и выполнения pipeline, добавляя при этом мощные возможности connectors

    Что такое Pipeline Integration

    Pipeline Integration — это механизм, который соединяет внешние ресурсы (через Connectors и ResourceInterfaces) с Tekton Tasks и Pipelines. Он определяет:

    • Какой ресурс и connector использовать в workflow pipeline
    • Конфигурацию параметров, необходимую для ресурса
    • Сопоставление атрибутов между выходными данными ресурса и параметрами pipeline
    • Сопоставление workspace для томов и учетных данных

    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-массива:

    apiVersion: tekton.dev/v1
    kind: Pipeline
    metadata:
      annotations:
        integrations.tekton.dev/integrations: |
          - name: code-repo
            interface:
              category: "GitCodeRepository"
            connectorRef:
              name: github-connector
              namespace: default
              setAtRuntime: false
            params:
            - name: repository
              value: "myorg/myapp"
              setAtRuntime: false
            - name: revision
              setAtRuntime: true
            attributes:
            - name: url
              param: git-url
              refPath:
              - tasks.git-clone.params.url
            - name: revision
              param: git-revision
              refPath:
              - tasks.git-clone.params.revision
            workspaces:
            - name: git-source
              workspace: source-workspace
              refPath:
              - tasks.git-clone.workspaces.output

    Структура Pipeline Integration

    Имя

    Имя интеграции pipeline.

    name: "code-repo"

    Ссылка на ResourceInterface

    Указывает, какой ResourceInterface использовать. Поддерживаются ссылки как на основе категории, так и на основе имени:

    Ссылка на основе категории (гибкая, работает с любым совместимым connector):

    interface:
      apiVersion: "connectors.alauda.io/v1alpha1"
      category: "GitCodeRepository"

    Все имена категорий определяются в метках ResourceInterface с именем resourceinterface.connectors.cpaas.io/category.

    Ссылка на основе имени (конкретный интерфейс):

    interface:
      name: "gitcoderepository"
      apiVersion: "connectors.alauda.io/v1alpha1"

    Когда использовать каждый подход:

    • Используйте ссылку на основе категории для повторно используемых pipeline, которые должны работать с разными реализациями resourceinterfaces
    • Используйте ссылку на основе имени для pipeline, которым требуется конкретное имя resourceinterface.

    Ссылка на Connector

    Указывает, какой экземпляр Connector использовать для доступа к внешнему ресурсу:

    connectorRef:
      name: "github-connector"        # Connector name
      namespace: "default"            # Optional, defaults to same namespace as pipeline
      setAtRuntime: true              # Whether to select connector at runtime

    Варианты конфигурации:

    • Фиксированный Connector: задайте name и namespace, оставьте setAtRuntime равным false или не указывайте его
    • Выбор во время выполнения: задайте setAtRuntime: true, чтобы разрешить выбор connector во время выполнения pipeline
    • Значение по умолчанию с возможностью переопределения: укажите name и задайте setAtRuntime: true, чтобы использовать значение по умолчанию с возможностью переопределения во время выполнения

    Параметры

    Входные параметры, требуемые ResourceInterface. Эти параметры используются для вычисления атрибутов ресурса:

    params:
    - name: repository
      value: "myorg/myapp"           # Fixed value
      setAtRuntime: false            # Not changeable at runtime
    - name: revision
      value: "main"                  # Default value
      setAtRuntime: true             # Can be changed at runtime

    Поведение параметров:

    • Если setAtRuntime: true, параметр должен быть указан при выполнении pipeline
    • Если setAtRuntime: false или параметр не указан, используется фиксированное значение value
    • Параметры без value, но с setAtRuntime: true, требуют ввода от пользователя во время выполнения

    Атрибуты

    Выходные атрибуты, вычисляемые на основе параметров и информации о connector, а также их сопоставление с параметрами pipeline:

    attributes:
    - name: url
      param: git-url                 # Pipeline parameter name (when parameterized)
      refPath:                       # Where this attribute is used
      - tasks.git-clone.params.url   # PipelineTask parameter that receives this value
    - name: revision
      value: "refs/heads/main"       # Static value (no parameterization)
      refPath:
      - tasks.git-clone.params.revision

    Конфигурация атрибутов:

    • Имя атрибута должно соответствовать ResourceInterface.spec.attributes[].name
    • Значение атрибута вычисляется с использованием выражения, заданного в ResourceInterface.spec.attributes[].expression
    • Параметризованные атрибуты создают параметры pipeline (указываются в поле param)
    • Статические атрибуты используют фиксированные значения (указываются в поле value)
    • refPath определяет, где значение атрибута используется в task pipeline

    Workspace

    Сопоставление workspace между workspace ResourceInterface и workspace pipeline:

    workspaces:
    - name: git-source              # ResourceInterface workspace name
      workspace: source-workspace   # Pipeline workspace name
      refPath:                      # Where this workspace is used
      - tasks.git-clone.workspaces.output
    - name: git-basic-auth
      workspace: git-credentials
      refPath:
      - tasks.git-clone.workspaces.basic-auth

    Конфигурация workspace:

    • Имя workspace должно соответствовать ResourceInterface.spec.workspaces[].name
    • Workspace pipeline автоматически создается с указанным в поле workspace значением, а значение по умолчанию берется из ResourceInterface.spec.workspaces[].workspaceMapping.name.
    • refPath определяет, какой workspace pipeline task использует этот workspace.

    Поддержка Task Integration

    Tasks могут объявлять поддержку интеграции, чтобы включить автоматическое сопоставление параметров и workspace:

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: git-clone
      annotations:
        integrations.tekton.dev/integrations: |
          - name: code-repo
            interface:
              category: Git Code Repository
            attributes:
            - name: url
              param: git-url
            - name: revision
              param: git-revision
            workspaces:
            - name: source
              workspace: output
            - name: credentials
              workspace: basic-auth
    spec:
      params:
      - name: git-url
        type: string
      - name: revision
        type: string
      workspaces:
      - name: output
      - name: basic-auth

    Примеры

    Revision задается во время выполнения

    • connector и repository имеют фиксированные значения, revision задается во время выполнения.
    • используется фиксированное значение https://github.com/myorg/myapp.git в параметре url task git-clone.
    • используется параметр времени выполнения $(params.revision) в параметре revision task git-clone.
    • используется workspace source-workspace в workspace source task git-clone.

    Например:

    - name: app-source
      interface:
        category: "GitCodeRepository"
      connectorRef:
        name: github-connector
        namespace: default
      params:
      - name: repository
        value: "myorg/myapp"
      - name: revision
        setAtRuntime: true
      attributes:
      - name: url
        value: "https://github.com/myorg/myapp.git"
        refPath:
        - tasks.git-clone.params.url
      - name: revision
        value: "$(params.revision)"
        refPath:
        - tasks.git-clone.params.revision
      workspaces:
      - name: git-source
        workspace: source-workspace
        refPath:
        - tasks.git-clone.workspaces.output

    Connector, repository и revision задаются во время выполнения

    • connector, repository и revision задаются во время выполнения.
    • используется параметр времени выполнения $(params.git-url) в параметре url task git-clone.
    • используется параметр времени выполнения $(params.git-revision) в параметре revision task git-clone.
    • используется workspace source-workspace в workspace source task git-clone.

    Например:

    - name: app-source
      interface:
        category: "GitCodeRepository"
        apiVersion: "connectors.alauda.io/v1alpha1"
      connectorRef:
        setAtRuntime: true
      params:
      - name: repository
        setAtRuntime: true
      - name: revision
        setAtRuntime: true
      attributes:
      - name: url
        param: git-url
        value: $(params.git-url)
        refPath:
        - tasks.git-clone.params.url
      - name: revision
        param: git-revision
        value: $(params.git-revision)
        refPath:
        - tasks.git-clone.params.revision
      workspaces:
      - name: git-source
        workspace: source-workspace
        refPath:
        - tasks.git-clone.workspaces.output

    Ссылки