4.7. 在 OpenShift Pipelines 中使用 Tekton Hub
Tekton Hub 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Tekton Hub 可帮助您发现、搜索和共享 CI/CD 工作流可重复使用的任务和管道。Tekton Hub 的一个公共实例位于 hub.tekton.dev 中。集群管理员也可以安装和部署 Tekton Hub 的自定义实例供企业用户使用。
4.7.1. 在 OpenShift Container Platform 集群上安装并部署 Tekton Hub
Tekton Hub 是一个可选组件 ; 集群管理员无法使用 TektonConfig
自定义资源(CR)安装它。要安装和管理 Tekton Hub,请使用 TektonHub
CR。
如果您使用 Github Enterprise 或 Gitlab Enterprise,请在与企业服务器相同的网络中安装并部署 Tekton Hub。例如,如果企业服务器在 VPN 后面运行,请在 VPN 之后也部署 Tekton Hub。
先决条件
-
确保在集群中的默认
openshift-pipelines
命名空间中安装了 Red Hat OpenShift Pipelines Operator。
流程
- 创建 Tekton Hub 仓库的分叉。
- 克隆已分叉的存储库。
更新
config.yaml
文件,使其至少包含一个具有以下范围的用户:-
具有
agent:create
范围,如果目录中有任何更改,可以设置一个 cron 作业,该作业会在间隔后刷新 Tekton Hub 数据库。 -
具有
catalog:refresh
范围的用户,它可以刷新目录以及 Tekton Hub 数据库中的所有资源。 具有
config:refresh
范围的用户,可获取其他范围。... scopes: - name: agent:create users: <username_registered_with_the_Git_repository_hosting_service_provider> - name: catalog:refresh users: <username_registered_with_the_Git_repository_hosting_service_provider> - name: config:refresh users: <username_registered_with_the_Git_repository_hosting_service_provider> ...
支持的服务供应商有 GitHub、GitLab 和 BitBucket。
-
具有
使用托管供应商的 Git 存储库创建 OAuth 应用程序,并记下客户端 ID 和客户端 Secret。
-
对于 GitHub OAuth 应用程序,将
Homepage URL
和Authorization 回调 URL
设置为<auth-route>
。 -
对于 GitLab OAuth 应用程序,请将
REDIRECT_URI
设为<auth-route>/auth/gitlab/callback
。 -
对于 BitBucket OAuth 应用程序,将
Callback URL
设置为<auth-route>
。
-
对于 GitHub OAuth 应用程序,将
编辑 Tekton Hub API secret 的
<tekton_hub_repository>/config/02-api/20-api-secret.yaml
文件中的以下字段:-
GH_CLIENT_ID
:通过 Git 存储库托管服务提供商创建的 OAuth 应用程序的客户端 ID。 -
GH_CLIENT_SECRET
:通过 Git 存储库托管服务提供商创建的 OAuth 应用中的客户端 Secret。 -
GHE_URL
:GitHub Enterprise URL,如果您要使用 GitHub Enterprise 进行身份验证。不要提供目录的 URL 作为此字段的值。 -
GL_CLIENT_ID
:来自 GitLab OAuth 应用程序的客户端 ID。 -
GL_CLIENT_SECRET
:来自 GitLab OAuth 应用的客户端 Secret。 -
GLE_URL
: GitLab Enterprise URL(如果使用 GitLab Enterprise 进行身份验证)。不要提供目录的 URL 作为此字段的值。 -
BB_CLIENT_ID
:来自 BitBucket OAuth 应用程序的客户端 ID。 -
BB_CLIENT_SECRET
:BitBucket OAuth 应用中的客户端 Secret。 -
JWT_SIGNING_KEY
:用于签署为用户创建的 JSON Web 令牌(JWT)的随机字符串。 -
ACCESS_JWT_EXPIRES_IN
:添加访问令牌过期的时间限制。例如,1m
,其中m
表示分钟。支持的时间单位为秒(s
)、分钟(m
)、小时(h
)、天(d
)和周(w
)。 -
REFRESH_JWT_EXPIRES_IN
:添加刷新令牌过期的时间限制。例如,1m
,其中m
表示分钟。支持的时间单位为秒(s
)、分钟(m
)、小时(h
)、天(d
)和周(w
)。确保为令牌刷新设置的到期时间大于为令牌访问设置的到期时间。 AUTH_BASE_URL
: OAuth 应用程序的 Route URL。注意- 将与客户端 ID 和客户端 Secret 相关的字段用于任何托管服务供应商的 Git 存储库。
-
通过 Git 存储库托管服务提供商注册的帐户凭据,让具有
catalog: refresh
的范围可以验证和加载所有目录资源到数据库。
-
- 提交更改并将其推送到您的已分叉的存储库。
确保
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
安装 Tekton Hub。
$ oc apply -f TektonHub.yaml 1
- 1
TektonConfig
CR 的文件名或路径。
检查安装的状态。
$ oc get tektonhub.operator.tekton.dev NAME VERSION READY REASON APIURL UIURL hub v1.7.2 True https://api.route.url/ https://ui.route.url/
4.7.1.1. 在 Tekton Hub 中手动刷新目录
在 OpenShift Container Platform 集群上安装并部署 Tekton Hub 时,也会安装 Postgres 数据库。最初,数据库为空。要将目录中可用的任务和管道添加到数据库,集群管理员必须刷新目录。
先决条件
-
确保您位于
<tekton_hub_repository>/config/
目录中。
流程
在 Tekton Hub UI 中,点击 Login -→ Sign In with GitHub。
注意GitHub 在公共的 Tekton Hub UI 中用作示例。对于在集群中的自定义安装,列出了您提供的客户端 ID 和客户端 Secret 的所有 Git 存储库托管服务供应商。
- 在主页上,点击 user profile 并复制令牌。
调用 Catalog Refresh API。
要使用特定名称刷新目录,请运行以下命令:
$ curl -X POST -H "Authorization: <jwt-token>" \ 1 <api-url>/catalog/<catalog_name>/refresh 2
输出示例:
[{"id":1,"catalogName":"tekton","status":"queued"}]
要刷新所有目录,请运行以下命令:
$ curl -X POST -H "Authorization: <jwt-token>" \ 1 <api-url>/catalog/refresh 2
- 在浏览器中刷新页面。
4.7.1.2. 可选:设置在 Tekton Hub 中刷新目录的 cron 作业
集群管理员可选择性地设置一个 cron 作业,以便在固定间隔后刷新数据库,因此目录中的更改会出现在 Tekton Hub web 控制台中。
如果资源添加到目录或更新,则刷新目录会在 Tekton Hub UI 中显示这些更改。但是,如果从目录中删除资源,则刷新目录不会从数据库中删除资源。Tekton Hub UI 继续显示已删除的资源。
先决条件
-
确保您位于
<project_root>/config/
目录中,其中<project_root>
是克隆的 Tekton Hub 存储库的顶级目录。 - 确保您有一个 JSON Web 令牌(JWT)令牌,其范围有刷新目录。
流程
创建基于代理的 JWT 令牌以供使用。
$ curl -X PUT --header "Content-Type: application/json" \ -H "Authorization: <access-token>" \ 1 --data '{"name":"catalog-refresh-agent","scopes": ["catalog:refresh"]}' \ <api-route>/system/user/agent
- 1
- JWT 令牌.
带有必要范围的代理令牌以
{"token":"<agent_jwt_token>"}
格式返回。请注意返回的令牌,并保留目录刷新 cron 作业。编辑
05-catalog-refresh-cj/50-catalog-refresh-secret.yaml
文件,将HUB_TOKEN
参数设置为上一步中返回的<agent_jwt_token>
。apiVersion: v1 kind: Secret metadata: name: catalog-refresh type: Opaque stringData: HUB_TOKEN: <hub_token> 1
- 1
- 上一步中返回的
<agent_jwt_token>
。
应用修改后的 YAML 文件。
$ oc apply -f 05-catalog-refresh-cj/ -n openshift-pipelines.
可选:默认情况下,cron 任务配置为每 30 分钟运行一次。要更改间隔,修改
05-catalog-refresh-cj/51-catalog-refresh-cronjob.yaml
文件中的schedule
参数的值。apiVersion: batch/v1 kind: CronJob metadata: name: catalog-refresh labels: app: tekton-hub-api spec: schedule: "*/30 * * * *" ...
4.7.1.3. 可选:在 Tekton Hub 配置中添加新用户
流程
根据预期的范围,集群管理员可以在
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
中。要激活其他范围,请确保用户至少登录一次。-
确保
config.yaml
文件中具有config-refresh
范围。 刷新配置。
$ curl -X POST -H "Authorization: <access-token>" \ 1 --header "Content-Type: application/json" \ --data '{"force": true} \ <api-route>/system/config/refresh
- 1
- JWT 令牌.
4.7.2. 在 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
。
4.7.3. 其他资源
- Tekton Hub 的 GitHub 存储库。
- 安装 OpenShift Pipelines
- Red Hat OpenShift Pipelines 发行注记