Pipeline Integration

Overview

在使用 Tekton 构建 CI/CD 流水线时,开发者通常需要集成外部资源,如 Git 仓库、容器镜像仓库和制品仓库。传统方式需要手动配置每个外部工具的 URL、凭证和参数,容易出错且耗时。

通过将 Tekton Pipelines 与 Connectors 集成,可以解决此问题,提供一种标准化方式将外部资源连接到流水线工作流。此集成实现了:

  • 便捷的资源浏览与选择:通过 UI 辅助浏览并添加 Git 仓库、Git Revision、OCI 仓库等外部资源,避免手动输入
  • 统一的资源属性:将同一远程资源的拆分属性作为整体处理,无需分别配置 urlrevision 参数及工作区配置
  • 引导式工作区设置:快速设置相关连接器的工作区,并清晰指引每个工作区适用的连接器类型
  • 保持灵活性:在保留当前编排和流水线执行体验的同时,增强连接器功能

什么是流水线集成

流水线集成是将外部资源(通过 ConnectorsResourceInterfaces)与 Tekton 任务和流水线连接的机制。它定义了:

  • 流水线工作流中使用的资源和连接器
  • 资源所需的参数配置
  • 资源输出与流水线参数之间的属性映射
  • 卷和凭证的工作区映射

PipelineIntegration 不是实际的 Kubernetes 资源,而是存储在 Tekton Pipeline 或 Task 注解中的集成元数据,使用 integrations.tekton.dev/integrations 键。

本文档介绍流水线集成的概念和关键字段。如果您想将连接器集成到自定义流水线或任务中,应了解本文所述的详细内容。

内置的 Pipeline 和 Task 组件已支持流水线集成,因此您可以直接使用,无需额外配置。

流水线集成关键字段

流水线集成包含以下关键字段:

  • ResourceInterface 引用:指定使用哪个 ResourceInterface(按类别或名称)
  • Connector 引用:标识提供资源的 Connector 实例
  • 参数配置:ResourceInterface 所需的输入参数
  • 属性映射:资源属性如何映射到流水线/任务参数
  • 工作区映射:资源工作区如何映射到流水线工作区

注解中的存储

集成元数据使用 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

流水线集成结构

名称

流水线集成的名称。

name: "code-repo"

ResourceInterface 引用

指定使用哪个 ResourceInterface。支持基于类别和基于名称的引用:

基于类别的引用(灵活,适用于任何兼容连接器):

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

所有类别名称定义于 ResourceInterface 标签 resourceinterface.connectors.cpaas.io/category

基于名称的引用(指定具体接口):

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

使用场景:

  • 复用流水线且需兼容不同 resourceinterface 实现时,使用基于类别
  • 需要特定 resourceinterface 名称时,使用基于名称

Connector 引用

指定用于访问外部资源的 Connector 实例:

connectorRef:
  name: "github-connector"        # 连接器名称
  namespace: "default"            # 可选,默认为流水线所在命名空间
  setAtRuntime: true              # 是否在运行时选择连接器

配置选项:

  • 固定连接器:设置 namenamespacesetAtRuntime 设为 false 或省略
  • 运行时选择:设置 setAtRuntime: true,允许流水线执行时选择连接器
  • 默认且可覆盖:提供 name 并设置 setAtRuntime: true,支持默认值和运行时覆盖

参数

ResourceInterface 所需的输入参数,用于计算资源属性:

params:
- name: repository
  value: "myorg/myapp"           # 固定值
  setAtRuntime: false            # 运行时不可更改
- name: revision
  value: "main"                  # 默认值
  setAtRuntime: true             # 运行时可更改

参数行为:

  • setAtRuntime: true 时,执行流水线时必须提供参数
  • setAtRuntime: false 或省略时,使用固定 value
  • valuesetAtRuntime: true 时,运行时需用户输入

属性

根据参数和连接器信息计算的输出属性,以及它们与流水线参数的映射:

attributes:
- name: url
  param: git-url                 # 流水线参数名(参数化时)
  refPath:                       # 属性使用位置
  - tasks.git-clone.params.url   # 接收该值的 PipelineTask 参数
- name: revision
  value: "refs/heads/main"       # 静态值(无参数化)
  refPath:
  - tasks.git-clone.params.revision

属性配置:

  • 属性名称 必须匹配 ResourceInterface.spec.attributes[].name
  • 属性值ResourceInterface.spec.attributes[].expression 定义的表达式计算
  • 参数化属性 通过 param 字段创建流水线参数
  • 静态属性 通过 value 字段使用固定值
  • refPath 定义属性值在流水线任务中的使用位置

工作区

ResourceInterface 工作区与流水线工作区的映射:

workspaces:
- name: git-source              # ResourceInterface 工作区名称
  workspace: source-workspace   # 流水线工作区名称
  refPath:                      # 工作区使用位置
  - tasks.git-clone.workspaces.output
- name: git-basic-auth
  workspace: git-credentials
  refPath:
  - tasks.git-clone.workspaces.basic-auth

工作区配置:

  • 工作区名称 必须匹配 ResourceInterface.spec.workspaces[].name
  • 流水线工作区 根据 workspace 字段自动创建,默认值来自 ResourceInterface.spec.workspaces[].workspaceMapping.name
  • refPath 定义哪些 pipelinetask 的工作区使用该工作区

任务集成支持

任务可以声明集成支持,实现自动参数和工作区映射:

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 在运行时设置

  • 连接器和仓库为固定值,revision 在运行时设置。
  • 在 git-clone 任务的 url 参数中使用固定值 https://github.com/myorg/myapp.git
  • 在 git-clone 任务的 revision 参数中使用运行时参数 $(params.revision)
  • 在 git-clone 任务的 source 工作区中使用 source-workspace

示例:

- 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

连接器、仓库和 revision 均在运行时设置

  • 连接器、仓库和 revision 均在运行时设置。
  • 在 git-clone 任务的 url 参数中使用运行时参数 $(params.git-url)
  • 在 git-clone 任务的 revision 参数中使用运行时参数 $(params.git-revision)
  • 在 git-clone 任务的 source 工作区中使用 source-workspace

示例:

- 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

References