3.7. 在 OpenShift Pipelines 中使用 Tekton Hub

重要

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

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

Tekton Hub 可帮助您发现、搜索和共享 CI/CD 工作流可重复使用的任务和管道。Tekton Hub 的一个公共实例位于 hub.tekton.dev 中。集群管理员也可以安装和部署 Tekton Hub 的自定义实例供企业用户使用。

3.7.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。

3.7.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
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml 2
        catalogRefreshInterval: 30m 3
    1
    需要安装 Tekton Hub 的命名空间;默认为 openshift-pipelines
    2
    config.yaml 文件的 URL。
    3
    目录自动刷新的时间间隔。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。默认间隔为 30 分钟。
  2. 应用 TektonHub CR。

    $ oc apply -f <TektonHub>.yaml 1
    1
    TektonHub CR 的文件名或路径。
    注意

    应用 TektonHub CR 时,Tekton Hub 会在 openshift-pipelines 命名空间中安装,并带有上游 Tekton Catalog 内容。

  3. 检查安装的状态。TektonHub CR 可能需要一些时间才能获得 steady 状态。

    $ oc get tektonhub.operator.tekton.dev

    输出示例

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

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

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

先决条件

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

流程

  1. 创建 Tekton Hub 仓库的分叉。
  2. 克隆已分叉的存储库。
  3. 使用托管供应商的 Git 存储库创建 OAuth 应用程序,并记下客户端 ID 和客户端 Secret。支持的提供程序是 GitHub、GitLab 和 BitBucket。

  4. 编辑克隆的存储库的 <tekton_hub_repository>/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 存储库托管服务供应商的未使用字段。

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

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 1
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml 2
        catalogRefreshInterval: 30m 3
    1
    需要安装 Tekton Hub 的命名空间;默认为 openshift-pipelines
    2
    使用 config.yaml 文件的 URL 替换。
    3
    目录自动刷新的时间间隔。支持的时间单位为秒(s)、分钟(m)、小时(h)、天(d)和周(w)。默认间隔为 30 分钟。
  6. 应用 TektonHub CR。

    $ oc apply -f <TektonHub>.yaml 1
    1
    TektonHub CR 的文件名或路径。
    注意

    应用 TektonHub CR 时,Tekton Hub 会在 openshift-pipelines 命名空间中安装,并带有上游 Tekton Catalog 内容。

  7. 检查安装的状态。TektonHub CR 可能需要一些时间才能获得 steady 状态。

    $ oc get tektonhub.operator.tekton.dev
    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.8.0    True             https://api.route.url/    https://ui.route.url/

3.7.2. 可选:在 Tekton Hub 配置中添加新用户

流程

  1. 根据预期的范围,集群管理员可以在 config.yaml 文件中添加新用户。

    ...
    scopes:
      - name: agent:create
        users: [<username_1>, <username_2>] 1
      - name: catalog:refresh
        users: [<username_3>, <username_4>]
      - name: config:refresh
        users: [<username_5>, <username_6>]
    
    default:
      scopes:
        - rating:read
        - rating:write
    ...
    1
    在 Git 存储库托管服务提供商中注册的用户名。
    注意

    当任何用户首次登录时,它们只会有默认范围,即使它们被添加到 config.yaml 中。要激活其他范围,请确保用户至少登录一次。

  2. 确保 config.yaml 文件中具有 config-refresh 范围。
  3. 刷新配置。

    $ curl -X POST -H "Authorization: <access-token>" \ 1
        --header "Content-Type: application/json" \
        --data '{"force": true} \
        <api-route>/system/config/refresh
    1
    JWT 令牌.

3.7.3. 可选:在 Tekton Hub 中使用自定义数据库

集群管理员可以将自定义数据库用于 Tekton Hub,而不是 Operator 安装的默认 PostgreSQL 数据库。您可以在安装时关联自定义数据库,并将其与 Tekton Hub 提供的 db-migrationapiui 接口一起使用。或者,即使安装了默认数据库,也可以将自定义数据库与 Tekton Hub 关联。

流程

  1. 在目标命名空间中创建名为 tekton-hub-db 的 secret,其键如下:

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      示例:自定义数据库 secret

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: <The name of the host of the database>
        POSTGRES_DB: <Name of the database>
        POSTGRES_USER: <username>
        POSTGRES_PASSWORD: <password>
        POSTGRES_PORT: <The port that the database is listening on>
      ...

      注意

      默认目标命名空间是 openshift-pipelines

  2. TektonHub CR 中,将 database secret 属性的值设置为 tekton-hub-db

    示例:添加自定义数据库 secret

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml
        catalogRefreshInterval: 30m
    ...

  3. 使用更新的 TektonHub CR 将自定义数据库与 Tekton Hub 关联。

    1. 如果您要在集群中安装 Tekton Hub 时关联自定义数据库,请应用更新的 TektonHub CR。

      $ oc apply -f <tekton-hub-cr>.yaml
    2. 另外,如果您要在 Tekton Hub 安装完成后关联自定义数据库,请将现有的 TektonHub CR 替换为更新的 TektonHub CR。

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

    $ oc get tektonhub.operator.tekton.dev

    输出示例

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

3.7.4. 将 Red Hat OpenShift Pipelines Operator 从 1.7 升级到 1.8 后禁用 Tekton Hub 授权

当使用 Red Hat OpenShift Pipelines Operator 1.8 安装 Tekton Hub 时,默认安装禁用了 Tekton Hub 工件的登录授权和评级。但是,当您将 Operator 从 1.7 升级到 1.8 时,集群中的 Tekton Hub 实例不会自动禁用登录授权和评级。

要在将 Operator 从 1.7 升级到 1.8 后禁用 Tekton Hub 的登录授权和评级,请执行以下步骤。

先决条件

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

流程

  1. 删除您在为 Operator 1.7 安装 Tekton Hub 时创建的现有 Tekton Hub API secret。

    $ oc delete secret tekton-hub-api -n <targetNamespace> 1
    1
    Tekton Hub API secret 和 Tekton Hub CR 的通用命名空间。默认情况下,目标命名空间是 openshift-pipelines
  2. 删除 Tekton Hub API 的 TektonInstallerSet 对象。

    $ oc get tektoninstallerset -o name | grep tekton-hub-api | xargs oc delete
    注意

    删除后,Operator 会自动创建一个新的 Tekton Hub API 安装程序设置。

    等待并检查 Tekton Hub 的状态。当 READY 列显示为 True 时,继续执行后续步骤。

    $ oc get tektonhub hub

    输出示例

    NAME   VERSION        READY   REASON   APIURL                                                                                                  UIURL
    hub    1.8.0          True             https://tekton-hub-api-openshift-pipelines.apps.example.com   https://tekton-hub-ui-openshift-pipelines.apps.example.com

  3. 删除 Tekton Hub UI 的 ConfigMap 对象。

    $ oc delete configmap tekton-hub-ui -n <targetNamespace> 1
    1
    Tekton Hub UI 和 Tekton Hub CR 的通用命名空间。默认情况下,目标命名空间是 openshift-pipelines
  4. 删除 Tekton Hub UI 的 TektonInstallerSet 对象。

    $ oc get tektoninstallerset -o name | grep tekton-hub-ui | xargs oc delete
    注意

    删除后,Operator 会自动创建一个新的 Tekton Hub UI 安装程序设置。

    等待并检查 Tekton Hub 的状态。当 READY 列显示为 True 时,继续执行后续步骤。

    $ oc get tektonhub hub

    输出示例

    NAME   VERSION        READY   REASON   APIURL                                                                                                  UIURL
    hub    1.8.0          True             https://tekton-hub-api-openshift-pipelines.apps.example.com   https://tekton-hub-ui-openshift-pipelines.apps.example.com

3.7.5. 在 Developer 视角中选择 Tekton Hub

集群管理员可以选择在 OpenShift Container Platform 集群的 Developer 视角的 Pipeline Builder 页中显示 Tekton Hub 资源,如任务和管道。

前提条件

  • 确保在集群中安装了 Red Hat OpenShift Pipelines Operator,并且 oc 命令行工具可用。

流程

  • 要在 Developer 视角中选择显示 Tekton Hub 资源,将 TektonConfig 自定义资源(CR)中的 enable-devconsole-integration 字段设置为 false

    apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonConfig
      metadata:
        name: config
      spec:
        targetNamespace: openshift-pipelines
        ...
        hub:
          params:
            - name: enable-devconsole-integration
              value: "false"
        ...

    默认情况下,TektonConfig CR 不包括 enable-devconsole-integration 字段,Red Hat OpenShift Pipelines Operator 假定值为 true

注意

如果您想完全禁用 Tekton Hub UI,在 TektonHub CR 中将 enableUI 字段设置为 false,而不是在 Developer 视角中显示 Tekton Hub 资源。

3.7.6. 其他资源