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。

流程

  1. 执行以下步骤之一:

    • 对于公共 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/')
      ...
      Copy to Clipboard Toggle word wrap
    • 对于私有 GitHub 存储库,将 addChangedFiles 参数的值设置为 true,并在以下所示的 YAML 配置文件中提供访问令牌详情、secretNamesecretKey

      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/')
      ...
      Copy to Clipboard Toggle word wrap
  2. 保存配置文件。

1.12.2. 使用 GitHub Interceptors 验证拉取请求

您可以使用 GitHub Interceptor 根据为存储库配置的 GitHub 所有者验证拉取请求处理。此验证可帮助您防止对 PipelineRunTaskRun 对象进行不必要的执行。只有在用户名列为拥有者或者由存储库的所有者发出可配置注释时,GitHub Interceptor 才会处理拉取请求。例如,当您以所有者身份在拉取请求上注释掉 /ok-to-test 时,会触发 PipelineRunTaskRun

注意

所有者在存储库根目录的 OWNERS 文件中配置。

先决条件

  • 已安装 Red Hat OpenShift Pipelines Operator。

流程

  1. 创建 secret 字符串值。
  2. 使用该值配置 GitHub Webhook。
  3. 创建名为 secretRef 的 Kubernetes secret,其中包含您的 secret 值。
  4. 将 Kubernetes secret 作为对 GitHub Interceptor 的引用。
  5. 创建一个 owners 文件,并将批准者列表添加到 approvers 部分。
  6. 执行以下步骤之一:

    • 对于公共 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
      ...
      Copy to Clipboard Toggle word wrap
    • 对于私有 GitHub 存储库,将 githubOwners 参数的值设置为 true,并在以下所示的 YAML 配置文件中提供访问令牌详情、secretNamesecretKey

      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
      ...
      Copy to Clipboard Toggle word wrap
      注意

      checkType 参数用于指定需要身份验证的 GitHub 所有者。您可以将其值设为 orgMembersrepoMembersall

  7. 保存配置文件。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat