搜索

1.12. 在 GitHub 拦截器中配置拉取请求功能

download PDF

使用 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/')
      ...
    • 对于私有 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/')
      ...
  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
      ...
    • 对于私有 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
      ...
      注意

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

  7. 保存配置文件。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.