3.8. 使用解析器指定远程管道和任务

管道和任务是 CI/CD 进程的可重复使用的块。您可以重复使用之前开发的管道或任务,或者由其他人开发的任务,而无需复制并粘贴其定义。这些管道或任务可从集群中的其他命名空间中的几种源到公共目录提供。

在管道运行资源中,您可以从现有源指定管道。在管道资源或任务运行资源中,您可以从现有源指定任务。

在这些情况下,Red Hat OpenShift Pipelines 中的 解析器 在运行时从指定源中检索管道或任务定义。

以下解析器包括在 Red Hat OpenShift Pipelines 的默认 installaton 中:

hub 解析器
从 Artifact Hub 或 Tekton Hub 上的 Pipelines Catalog 检索任务或管道。
捆绑包解析器
从 Tekton 捆绑包检索任务或管道,该捆绑包是可从任何 OCI 存储库(如 OpenShift 容器存储库)提供的 OCI 镜像。
集群解析器
检索已在特定命名空间中在同一 OpenShift Container Platform 集群中创建的任务或管道。
Git 解析器
从 Git 存储库检索任务或管道绑定。您必须指定存储库、分支和路径。

3.8.1. 从 Tekton 目录指定远程管道或任务

您可以使用 hub 解析器指定在 Artifact Hub 的公共 Tekton 目录或 Tekton Hub 实例中定义的远程管道或任务。

重要

Red Hat OpenShift Pipelines 不支持 Artifact Hub 项目。仅支持 Artifact Hub 的配置。

3.8.1.1. 配置 hub 解析器

您可以通过配置 hub 解析器来更改拉取资源的默认 hub 和默认目录设置。

流程

  1. 要编辑 TektonConfig 自定义资源,请输入以下命令:

    $ oc edit TektonConfig config
  2. TektonConfig 自定义资源中,编辑 pipeline.hub-resolver-config spec:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        hub-resolver-config:
          default-tekton-hub-catalog: Tekton 1
          default-artifact-hub-task-catalog: tekton-catalog-tasks 2
          default-artifact-hub-pipeline-catalog: tekton-catalog-pipelines 3
          defailt-kind: pipeline 4
          default-type: tekton 5
          tekton-hub-api: "https://my-custom-tekton-hub.example.com" 6
          artifact-hub-api: "https://my-custom-artifact-hub.example.com" 7
    1
    用于拉取资源的默认 Tekton Hub 目录。
    2
    用于拉取任务资源的默认 Artifact Hub 目录。
    3
    用于拉取管道资源的默认 Artifact Hub 目录。
    4
    用于引用的默认对象类型。
    5
    用于拉取资源的默认 hub,对于 Artifact Hub 是工件(artifact),对于 tekton 是 Tekton Hub。
    6
    使用的 Tekton Hub API,如果 default-type 选项被设置为 tekton
    7
    可选:如果 default-type 选项被设置为 artifact,则使用 Artifact Hub API。
    重要

    如果将 default-type 选项设置为 tekton,则必须通过设置 tekton-hub-api 值来配置您自己的 Tekton Hub 实例。

    如果将 default-type 选项设置为 artifact,则解析器默认使用位于 https://artifacthub.io/ 的公共 hub API。您可以通过设置 artifact-hub-api 值来配置您自己的 Artifact Hub API。

3.8.1.2. 使用 hub 解析器指定远程管道或任务

在创建管道运行时,您可以指定来自 Artifact Hub 或 Tekton Hub 的远程管道。在创建管道或任务运行时,您可以从 Artifact Hub 或 Tekton Hub 指定远程任务。

流程

  • 要指定来自 Artifact Hub 或 Tekton Hub 的远程管道或任务,请在 pipelineReftaskRef spec 中使用以下引用格式:

    # ...
      resolver: hub
      params:
      - name: catalog
        value: <catalog>
      - name: type
        value: <catalog_type>
      - name: kind
        value: [pipeline|task]
      - name: name
        value: <resource_name>
      - name: version
        value: <resource_version>
    # ...

    表 3.8. hub 解析器支持的参数

    参数描述示例值

    catalog

    用于拉取资源的目录。

    默认:tekton-catalog-tasks(用于 task 类型); tekton-catalog-pipelines (用于 pipeline 类型)。

    type

    用于拉取资源的目录类型。artifact(Artifact Hub)或 tekton(Tekton Hub)。

    默认: artifact

    kind

    输入 taskpipeline

    默认: task

    name

    从 hub 获取的任务或管道的名称。

    golang-build

    version

    要从 hub 获取的任务或管道版本。您必须使用引号(")来括起数据。

    "0.5.0"

    如果管道或任务需要额外的参数,请在 params 中提供这些参数。

以下示例管道运行引用目录中的远程管道:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: hub-pipeline-reference-demo
spec:
  pipelineRef:
    resolver: hub
    params:
    - name: catalog
      value: tekton-catalog-pipelines
    - name: type
      value: artifact
    - name: kind
      value: pipeline
    - name: name
      value: example-pipeline
    - name: version
      value: "0.1"
    - name: sample-pipeline-parameter
      value: test

以下示例管道从目录中引用远程任务:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: pipeline-with-cluster-task-reference-demo
spec:
  tasks:
  - name: "cluster-task-reference-demo"
    taskRef:
      resolver: hub
      params:
      - name: catalog
        value: tekton-catalog-tasks
      - name: type
        value: artifact
      - name: kind
        value: task
      - name: name
        value: example-task
      - name: version
        value: "0.6"
      - name: sample-task-parameter
        value: test

以下示例任务运行来引用目录中的远程任务:

apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: cluster-task-reference-demo
spec:
  taskRef:
    resolver: hub
    params:
    - name: catalog
      value: tekton-catalog-tasks
    - name: type
      value: artifact
    - name: kind
      value: task
    - name: name
      value: example-task
    - name: version
      value: "0.6"
    - name: sample-task-parameter
      value: test

3.8.2. 从 Tekton 捆绑包指定远程管道或任务

您可以使用捆绑包解析器指定 Tekton 捆绑包中的远程管道或任务。Tekton 捆绑包是任何 OCI 存储库(如 OpenShift 容器存储库)提供的 OCI 镜像。

3.8.2.1. 配置捆绑包解析器

您可以通过配置捆绑包解析器来更改默认服务帐户名称和从 Tekton 捆绑包中拉取资源的默认 kind。

流程

  1. 要编辑 TektonConfig 自定义资源,请输入以下命令:

    $ oc edit TektonConfig config
  2. TektonConfig 自定义资源中,编辑 pipeline.bundles-resolver-config spec:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        bundles-resolver-config:
          default-service-account: pipelines 1
          default-kind: task 2
    1
    用于捆绑包请求的默认服务帐户名称。
    2
    捆绑包镜像中的默认层类型。

3.8.2.2. 使用捆绑包解析器指定远程管道或任务

在创建管道运行时,您可以从 Tekton 捆绑包中指定远程管道。在创建管道或任务运行时,您可以从 Tekton 捆绑包中指定远程任务。

流程

  • 要从 Tekton 捆绑包中指定远程管道或任务,请在 pipelineReftaskRef spec 中使用以下引用格式:

    # ...
      resolver: bundles
      params:
      - name: bundle
        value: <fully_qualified_image_name>
      - name: name
        value: <resource_name>
      - name: kind
        value: [pipeline|task]
    # ...

    表 3.9. 捆绑包解析器支持的参数

    参数描述示例值

    serviceAccount

    构建 registry 凭据时要使用的服务帐户名称。

    default

    bundle

    指向镜像要获取的捆绑包 URL。

    gcr.io/tekton-releases/catalog/upstream/golang-build:0.1

    name

    要从捆绑包中拉取的资源名称。

    golang-build

    kind

    从捆绑包中拉取的资源类型。

    task

    如果管道或任务需要额外的参数,请在 params 中提供这些参数。

以下示例管道运行引用 Tekton 捆绑包中的远程管道:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: bundle-pipeline-reference-demo
spec:
  pipelineRef:
    resolver: bundles
    params:
    - name: bundle
      value: registry.example.com:5000/simple/pipeline:latest
    - name: name
      value: hello-pipeline
    - name: kind
      value: pipeline
    - name: sample-pipeline-parameter
      value: test
  params:
  - name: username
    value: "pipelines"

以下示例管道引用 Tekton 捆绑包中的远程任务:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: pipeline-with-bundle-task-reference-demo
spec:
  tasks:
  - name: "bundle-task-demo"
    taskRef:
      resolver: bundles
      params:
      - name: bundle
        value: registry.example.com:5000/advanced/task:latest
      - name: name
        value: hello-world
      - name: kind
        value: task
      - name: sample-task-parameter
        value: test

以下示例任务运行引用 Tekton 捆绑包中的远程任务:

apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: bundle-task-reference-demo
spec:
  taskRef:
    resolver: bundles
    params:
    - name: bundle
      value: registry.example.com:5000/simple/new_task:latest
    - name: name
      value: hello-world
    - name: kind
      value: task
    - name: sample-task-parameter
      value: test

3.8.3. 从同一集群中指定远程管道或任务

您可以使用集群解析器指定在运行 Red Hat OpenShift Pipelines 的 OpenShift Container Platform 集群上的命名空间中定义的远程管道或任务。

3.8.3.1. 配置集群解析器

您可以更改集群解析器的默认类型和命名空间,或者限制集群解析器可以使用的命名空间。

流程

  1. 要编辑 TektonConfig 自定义资源,请输入以下命令:

    $ oc edit TektonConfig config
  2. TektonConfig 自定义资源中,编辑 pipeline.cluster-resolver-config spec:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        cluster-resolver-config:
          default-kind: pipeline 1
          default-namespace: namespace1 2
          allowed-namespaces: namespace1, namespace2 3
          blocked-namespaces: namespace3, namespace4 4
    1
    如果没有在参数中指定,则获取的默认资源类型。
    2
    如果没有在参数中指定,用于获取资源的默认命名空间。
    3
    以逗号分隔的解析器允许访问的命名空间列表。如果没有定义此密钥,则允许所有命名空间。
    4
    可选的以逗号分隔的命名空间列表,解析器会阻止访问它们。如果没有定义此密钥,则允许所有命名空间。

3.8.3.2. 使用集群解析器指定远程管道或任务

在创建管道运行时,您可以从同一集群中指定远程管道。在创建管道或任务运行时,您可以从同一集群中指定远程任务。

流程

  • 要指定同一集群中的远程管道或任务,请在 pipelineReftaskRef spec 中使用以下引用格式:

    # ...
      resolver: cluster
      params:
      - name: name
        value: <name>
      - name: namespace
        value: <namespace>
      - name: kind
        value: [pipeline|task]
    # ...

    表 3.10. 集群解析器支持的参数

    参数描述示例值

    name

    要获取的资源的名称。

    some-pipeline

    namespace

    包含资源的集群中的命名空间。

    other-namespace

    kind

    要获取的资源类型。

    pipeline

    如果管道或任务需要额外的参数,请在 params 中提供这些参数。

以下示例管道运行引用同一集群中的远程管道:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: cluster-pipeline-reference-demo
spec:
  pipelineRef:
    resolver: cluster
    params:
    - name: name
      value: some-pipeline
    - name: namespace
      value: test-namespace
    - name: kind
      value: pipeline
    - name: sample-pipeline-parameter
      value: test

以下示例管道引用同一集群中的远程任务:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: pipeline-with-cluster-task-reference-demo
spec:
  tasks:
  - name: "cluster-task-reference-demo"
    taskRef:
      resolver: cluster
      params:
      - name: name
        value: some-task
      - name: namespace
        value: test-namespace
      - name: kind
        value: task
      - name: sample-task-parameter
        value: test

以下示例任务运行引用同一集群中的远程任务:

apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: cluster-task-reference-demo
spec:
  taskRef:
    resolver: cluster
    params:
    - name: name
      value: some-task
    - name: namespace
      value: test-namespace
    - name: kind
      value: task
    - name: sample-task-parameter
      value: test

3.8.4. 从 Git 仓库指定远程管道或任务

您可以使用 Git 解析器指定 Git 仓库中的远程管道或任务。存储库必须包含定义管道或任务的 YAML 文件。Git 解析器可以通过匿名方式克隆存储库,也可以使用经过身份验证的 SCM API 访问存储库。

3.8.4.1. 为匿名 Git 克隆配置 Git 解析器

如果要使用匿名 Git 克隆,您可以配置默认的 Git 修订、获取超时和默认存储库 URL,以便从 Git 存储库拉取远程管道和任务。

流程

  1. 要编辑 TektonConfig 自定义资源,请输入以下命令:

    $ oc edit TektonConfig config
  2. TektonConfig 自定义资源中,编辑 pipeline.git-resolver-config spec:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        git-resolver-config:
          default-revision: main 1
          fetch-timeout: 1m 2
          default-url: https://github.com/tektoncd/catalog.git 3
    1
    如果未指定,使用默认 Git 修订。
    2
    单个 Git 克隆解析可能需要的最大时间,如 1m2s700ms。Red Hat OpenShift Pipelines 还在所有解析请求中强制实施全局最大超时时间为 1 分钟。
    3
    如果未指定任何,匿名克隆的默认 Git 存储库 URL。

3.8.4.2. 为经过身份验证的 SCM API 配置 Git 解析器

对于经过身份验证的 SCM API,您必须为经过身份验证的 Git 连接设置配置。

您可以使用 go-scm 库支持的 Git 存储库供应商。并非所有 go-scm 实现都已使用 Git 解析器测试,但以下供应商已知可以正常工作:

  • github.com 和 GitHub Enterprise
  • gitlab.com 和自托管的 Gitlab
  • Gitea
  • Bitbucket 服务器
  • Bitbucket 云
注意
  • 您只能在集群中使用经过身份验证的 SCM API 配置一个 Git 连接。此连接可供集群的所有用户使用。集群的所有用户都可以使用您为连接配置的安全令牌访问存储库。
  • 如果将 Git 解析器配置为使用经过身份验证的 SCM API,您还可以使用匿名 Git 克隆引用来检索管道和任务。

流程

  1. 要编辑 TektonConfig 自定义资源,请输入以下命令:

    $ oc edit TektonConfig config
  2. TektonConfig 自定义资源中,编辑 pipeline.git-resolver-config spec:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        git-resolver-config:
          default-revision: main 1
          fetch-timeout: 1m 2
          scm-type: github 3
          server-url: api.internal-github.com 4
          api-token-secret-name: github-auth-secret 5
          api-token-secret-key: github-auth-key 6
          api-token-secret-namespace: github-auth-namespace 7
          default-org: tektoncd 8
    1
    如果未指定,使用默认 Git 修订。
    2
    单个 Git 克隆解析可能需要的最大时间,如 1m2s700ms。Red Hat OpenShift Pipelines 还在所有解析请求中强制实施全局最大超时时间为 1 分钟。
    3
    SCM 提供程序类型。
    4
    用于经过身份验证的 SCM API 的基本 URL。如果您使用 github.comgitlab.com 或 BitBucket Cloud,则不需要此设置。
    5
    包含 SCM 提供程序 API 令牌的 secret 名称。
    6
    包含令牌的令牌 secret 中的密钥。
    7
    包含令牌 secret 的命名空间(如果不是 default)。
    8
    可选:使用经过身份验证的 API 时存储库的默认机构。如果您没有在解析器参数中指定机构,则使用此机构。
注意

使用经过身份验证的 SCM API 需要 scm-type,api-token-secret-name, 和 api-token-secret-key 设置。

3.8.4.3. 使用 Git 解析器指定远程管道或任务

在创建管道运行时,您可以从 Git 仓库指定远程管道。在创建管道或任务运行时,您可以从 Git 仓库指定远程任务。

先决条件

  • 如果要使用经过身份验证的 SCM API,您必须为 Git 解析器配置经过身份验证的 Git 连接。

流程

  1. 要从 Git 仓库指定远程管道或任务,请在 pipelineReftaskRef spec 中使用以下引用格式:

    # ...
      resolver: git
      params:
      - name: url
        value: <git_repository_url>
      - name: revision
        value: <branch_name>
      - name: pathInRepo
        value: <path_in_repository>
    # ...

    表 3.11. Git 解析器支持的参数

    参数描述示例值

    url

    使用匿名克隆时存储库的 URL。

    https://github.com/tektoncd/catalog.git

    repo

    使用经过身份验证的 SCM API 时的存储库名称。

    test-infra

    org

    使用经过身份验证的 SCM API 时存储库的机构。

    tektoncd

    revision

    存储库中的 Git 修订。您可以指定分支名称、标签名称或提交 SHA 哈希。

    aeb957601cf41c012be462827053a21a420befca
    main
    v0.38.2

    pathInRepo

    存储库中的 YAML 文件的路径名称。

    task/golang-build/0.3/golang-build.yaml

    注意

    要匿名克隆和获取存储库,请使用 url 参数。要使用经过身份验证的 SCM API,请使用 repo 参数。不要同时指定 url 参数和 repo 参数。

    如果管道或任务需要额外的参数,请在 params 中提供这些参数。

以下示例管道运行引用 Git 存储库中的远程管道:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: git-pipeline-reference-demo
spec:
  pipelineRef:
    resolver: git
    params:
    - name: url
      value: https://github.com/tektoncd/catalog.git
    - name: revision
      value: main
    - name: pathInRepo
      value: pipeline/simple/0.1/simple.yaml
    - name: sample-pipeline-parameter
      value: test
  params:
  - name: name
    value: "testPipelineRun"

以下示例管道引用 Git 存储库中的远程任务:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: pipeline-with-git-task-reference-demo
spec:
  tasks:
  - name: "git-task-reference-demo"
    taskRef:
      resolver: git
      params:
      - name: url
        value: https://github.com/tektoncd/catalog.git
      - name: revision
        value: main
      - name: pathInRepo
        value: task/git-clone/0.6/git-clone.yaml
      - name: sample-task-parameter
        value: test

以下示例任务运行引用 Git 存储库中的远程任务:

apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: git-task-reference-demo
spec:
  taskRef:
    resolver: git
    params:
    - name: url
      value: https://github.com/tektoncd/catalog.git
    - name: revision
      value: main
    - name: pathInRepo
      value: task/git-clone/0.6/git-clone.yaml
    - name: sample-task-parameter
      value: test

3.8.5. 其他资源