第 1 章 在 OpenShift Pipelines 中使用 Tekton Hub

重要

Tekton Hub 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

Tekton Hub 可帮助您发现、搜索和共享 CI/CD 工作流可重复使用的任务和管道。Tekton Hub 的一个公共实例位于 hub.tekton.dev 中。集群管理员还可以通过修改 TektonHub 自定义资源(CR)中的配置来安装和部署 Tekton Hub 的自定义实例。

1.1. 在 OpenShift Container Platform 集群上安装并部署 Tekton Hub

Tekton Hub 是一个可选组件 ; 集群管理员无法使用 TektonConfig 自定义资源(CR)安装它。要安装和管理 Tekton Hub,请使用 TektonHub CR。

您可以使用以下模式在集群中安装 Tekton Hub:

  • 没有 Tekton Hub 工件的登录授权和评级
  • 使用 Tekton Hub 工件的登录授权和评级
注意

如果您使用 Github Enterprise 或 Gitlab Enterprise,请在与企业服务器相同的网络中安装并部署 Tekton Hub。例如,如果企业服务器在 VPN 后面运行,请在 VPN 之后也部署 Tekton Hub。

1.1.1. 在不登录和评级的情况下安装 Tekton Hub

您可以使用默认配置在集群中安装 Tekton Hub。在使用默认配置时,Tekton Hub 不支持使用 Tekton Hub 工件的授权和评级登录。

先决条件

  • 确保在集群中的默认 openshift-pipelines 命名空间中安装了 Red Hat OpenShift Pipelines Operator。

流程

  1. 创建一个类似以下示例的 TektonHub CR。

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 1
      db:                      # Optional: If you want to use custom database
        secret: tekton-hub-db  # Name of db secret should be `tekton-hub-db`
    
      categories:              # Optional: If you want to use custom categories
        - Automation
        - Build Tools
        - CLI
        - Cloud
        - Code Quality
        - ...
    
      catalogs:                # Optional: If you want to use custom catalogs
        - name: tekton
          org: tektoncd
          type: community
          provider: github
          url: https://github.com/tektoncd/catalog
          revision: main
    
      scopes:                   # Optional: If you want to add new users
        - name: agent:create
          users: [abc, qwe, pqr]
        - name: catalog:refresh
          users: [abc, qwe, pqr]
        - name: config:refresh
          users: [abc, qwe, pqr]
    
      default:                   # Optional: If you want to add custom default scopes
        scopes:
          - rating:read
          - rating:write
    
      api:
        catalogRefreshInterval: 30m 2
    1
    需要安装 Tekton Hub 的命名空间;默认为 openshift-pipelines
    2
    目录自动刷新的时间间隔。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。默认间隔为 30 分钟。
    注意

    如果没有为 TektonHub CR 中的可选字段提供自定义值,则会使用 Tekton Hub API 配置映射中配置的默认值。

  2. 应用 TektonHub CR。

    $ oc apply -f <tekton-hub-cr>.yaml
  3. 检查安装的状态。TektonHub CR 可能需要一些时间才能获得 steady 状态。

    $ oc get tektonhub.operator.tekton.dev

    输出示例

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/

1.1.2. 使用登录和评级安装 Tekton Hub

您可以使用支持使用 Tekton Hub 工件的授权和评级登录的自定义配置在集群中安装 Tekton Hub。

先决条件

  • 确保在集群中的默认 openshift-pipelines 命名空间中安装了 Red Hat OpenShift Pipelines Operator。

流程

  1. 使用托管供应商的 Git 存储库创建 OAuth 应用程序,并记下客户端 ID 和客户端 Secret。支持的提供程序是 GitHub、GitLab 和 BitBucket。

  2. 编辑 <tekton_hub_root>/config/02-api/20-api-secret.yaml 文件,使其包含 Tekton Hub API secret。例如:

    apiVersion: v1
    kind: Secret
    metadata:
      name: tekton-hub-api
      namespace: openshift-pipelines
    type: Opaque
    stringData:
      GH_CLIENT_ID: 1
      GH_CLIENT_SECRET: 2
      GL_CLIENT_ID: 3
      GL_CLIENT_SECRET: 4
      BB_CLIENT_ID: 5
      BB_CLIENT_SECRET: 6
      JWT_SIGNING_KEY: 7
      ACCESS_JWT_EXPIRES_IN: 8
      REFRESH_JWT_EXPIRES_IN: 9
      AUTH_BASE_URL: 10
      GHE_URL: 11
      GLE_URL: 12
    1
    GitHub OAuth 应用程序的客户端 ID。
    2
    GitHub OAuth 应用程序的客户端 Secret。
    3
    GitLab OAuth 应用的客户端 ID。
    4
    GitLab OAuth 应用中的 Client Secret。
    5
    BitBucket OAuth 应用程序的客户端 ID。
    6
    BitBucket OAuth 应用程序的客户端机密。
    7
    用于为用户创建的 JSON Web Token (JWT) 签名的随机字符串。
    8
    添加访问令牌过期的时间限制。例如: 1m,其中 m 表示分钟。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。
    9
    添加刷新令牌过期的时间限制。例如,1m,其中 m 表示分钟。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。确保为令牌刷新设置的到期时间大于为令牌访问设置的到期时间。
    10
    OAuth 应用的路由 URL。
    11
    GitHub Enterprise URL,如果您使用 GitHub Enterprise 进行身份验证。不要提供目录的 URL 作为此字段的值。
    12
    GitLab Enterprise URL,如果您使用 GitLab Enterprise 进行身份验证。不要提供目录的 URL 作为此字段的值。
    注意

    您可以删除与部署无关的 Git 存储库托管服务供应商的未使用字段。

  3. 创建一个类似以下示例的 TektonHub CR。

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 1
      db: 2
        secret: tekton-hub-db 3
    
      categories: 4
        - Automation
        - Build Tools
        - CLI
        - Cloud
        - Code Quality
          ...
    
      catalogs: 5
        - name: tekton
          org: tektoncd
          type: community
          provider: github
          url: https://github.com/tektoncd/catalog
          revision: main
    
      scopes: 6
        - name: agent:create
          users: [<username>]
        - name: catalog:refresh
          users: [<username>]
        - name: config:refresh
          users: [<username>]
    
      default: 7
        scopes:
          - rating:read
          - rating:write
    
      api:
        catalogRefreshInterval: 30m 8
    1
    需要安装 Tekton Hub 的命名空间;默认为 openshift-pipelines
    2
    可选:自定义数据库,如 Crunchy Postgres 数据库。
    3
    数据库 secret 的名称必须是 tekton-hub-db
    4
    可选:为 Tekton Hub 中的任务和管道自定义类别。
    5
    可选:为 Tekton Hub 自定义目录。
    6
    可选:其他用户。您可以满足多个用户,如 [<username_1>, <username_2>, <username_3>]
    7
    可选:自定义默认范围。
    8
    目录自动刷新的时间间隔。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。默认间隔为 30 分钟。
    注意

    如果没有为 TektonHub CR 中的可选字段提供自定义值,则会使用 Tekton Hub API 配置映射中配置的默认值。

  4. 应用 TektonHub CR。

    $ oc apply -f <tekton-hub-cr>.yaml
  5. 检查安装的状态。TektonHub CR 可能需要一些时间才能获得 steady 状态。

    $ oc get tektonhub.operator.tekton.dev

    输出示例

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/