1.12. 在 GitHub 拦截器中配置拉取请求功能
使用 GitHub Interceptor,您可以创建验证和过滤 GitHub Webhook 的逻辑。例如,您可以验证 webhook 的源并根据指定条件过滤传入的事件。当使用 GitHub Interceptor 过滤事件数据时,您可以在字段中指定拦截器可以接受的事件类型。在 Red Hat OpenShift Pipelines 中,您可以使用 GitHub Interceptor 的以下功能:
- 根据已更改的文件过滤拉取请求事件
- 根据配置的 GitHub 所有者验证拉取请求
1.12.1. 使用 GitHub Interceptor 过滤拉取请求
您可以根据为推送和拉取事件更改的文件过滤 GitHub 事件。这有助于您只对 Git 仓库中的相关更改执行管道。GitHub Interceptor 添加以逗号分隔的所有更改的文件列表,并使用 CEL Interceptor 根据更改的文件过滤传入的事件。更改的文件列表添加到顶层 extensions
字段中事件有效负载的 changed_files
属性中。
先决条件
- 已安装 Red Hat OpenShift Pipelines Operator。
流程
执行以下步骤之一:
对于公共 GitHub 存储库,在 YAML 配置文件中将
addChangedFiles
参数的值设置为true
,如下所示:apiVersion: triggers.tekton.dev/v1beta1 kind: EventListener metadata: name: github-add-changed-files-pr-listener spec: triggers: - name: github-listener interceptors: - ref: name: "github" kind: ClusterInterceptor apiVersion: triggers.tekton.dev params: - name: "secretRef" value: secretName: github-secret secretKey: secretToken - name: "eventTypes" value: ["pull_request", "push"] - name: "addChangedFiles" value: enabled: true - ref: name: cel params: - name: filter value: extensions.changed_files.matches('controllers/') ...
对于私有 GitHub 存储库,将
addChangedFiles
参数的值设置为true
,并在以下所示的 YAML 配置文件中提供访问令牌详情、secretName
和secretKey
:apiVersion: triggers.tekton.dev/v1beta1 kind: EventListener metadata: name: github-add-changed-files-pr-listener spec: triggers: - name: github-listener interceptors: - ref: name: "github" kind: ClusterInterceptor apiVersion: triggers.tekton.dev params: - name: "secretRef" value: secretName: github-secret secretKey: secretToken - name: "eventTypes" value: ["pull_request", "push"] - name: "addChangedFiles" value: enabled: true personalAccessToken: secretName: github-pat secretKey: token - ref: name: cel params: - name: filter value: extensions.changed_files.matches('controllers/') ...
- 保存配置文件。
1.12.2. 使用 GitHub Interceptors 验证拉取请求
您可以使用 GitHub Interceptor 根据为存储库配置的 GitHub 所有者验证拉取请求处理。此验证可帮助您防止对 PipelineRun
或 TaskRun
对象进行不必要的执行。只有在用户名列为拥有者或者由存储库的所有者发出可配置注释时,GitHub Interceptor 才会处理拉取请求。例如,当您以所有者身份在拉取请求上注释掉 /ok-to-test
时,会触发 PipelineRun
或 TaskRun
。
所有者在存储库根目录的 OWNERS
文件中配置。
先决条件
- 已安装 Red Hat OpenShift Pipelines Operator。
流程
- 创建 secret 字符串值。
- 使用该值配置 GitHub Webhook。
-
创建名为
secretRef
的 Kubernetes secret,其中包含您的 secret 值。 - 将 Kubernetes secret 作为对 GitHub Interceptor 的引用。
-
创建一个
owners
文件,并将批准者列表添加到approvers
部分。 执行以下步骤之一:
对于公共 GitHub 存储库,在 YAML 配置文件中将
githubOwners
参数的值设置为true
,如下所示:apiVersion: triggers.tekton.dev/v1beta1 kind: EventListener metadata: name: github-owners-listener spec: triggers: - name: github-listener interceptors: - ref: name: "github" kind: ClusterInterceptor apiVersion: triggers.tekton.dev params: - name: "secretRef" value: secretName: github-secret secretKey: secretToken - name: "eventTypes" value: ["pull_request", "issue_comment"] - name: "githubOwners" value: enabled: true checkType: none ...
对于私有 GitHub 存储库,将
githubOwners
参数的值设置为true
,并在以下所示的 YAML 配置文件中提供访问令牌详情、secretName
和secretKey
:apiVersion: triggers.tekton.dev/v1beta1 kind: EventListener metadata: name: github-owners-listener spec: triggers: - name: github-listener interceptors: - ref: name: "github" kind: ClusterInterceptor apiVersion: triggers.tekton.dev params: - name: "secretRef" value: secretName: github-secret secretKey: secretToken - name: "eventTypes" value: ["pull_request", "issue_comment"] - name: "githubOwners" value: enabled: true personalAccessToken: secretName: github-token secretKey: secretToken checkType: all ...
注意checkType
参数用于指定需要身份验证的 GitHub 所有者。您可以将其值设为orgMembers
、repoMembers
或all
。
- 保存配置文件。