首页 > 其他分享 >Tekton Trigger Interceptors 基础

Tekton Trigger Interceptors 基础

时间:2023-12-05 13:45:03浏览次数:45  
标签:github name triggers GitHub Interceptors value Tekton Trigger Interceptor

Interceptors 概述

Interceptor是针对特定平台的的事件处理器,在 TriggerBinding 之前运行。它允许您执行有效负载过滤、验证(使用秘密)、转换、定义和测试触发条件,以及实现其他有用的处理。一旦事件数据通过Interceptor,它就会在将有效负载数据传递到 TriggerBinding 之前转到Trigger。还可以使用Interceptor来修改关联Trigger的行为。

Interceptor 实现方式

Standalone Interceptors,是Interceptors或 ClusterInterceptor 自定义资源定义 (CRD) 的实例。可以通过在 EventListener 中引用这些Interceptors以及所需的参数来指定它们。也可以使用 ClusterInterceptor CRD 来实现您自己的自定义Interceptors。

Tekton Trigger 内置的 Interceptor

# kubectl get ClusterInterceptor
NAME        AGE
bitbucket   3d20h
cel         3d20h
github      3d20h
gitlab      3d20h
slack       3d20h

Interceptor 资源规范

interceptors:
    - name:                     # 可选)唯一标识此interceptor定义的名称
      ref:                      # 对 ClusterInterceptor 或 Interceptor 对象的引用
        name:                   # 引用的 ClusterInterceptor 的名称。可选值:github、gitlab、bitbucket、cel、slack
        kind:                  # (可选)指定引用的 Kubernetes 对象是 ClusterInterceptor 对象还是 NamespacedInterceptor。默认值为 ClusterInterceptor
        apiVersion:            # (可选)指定目标API版本,例如triggers.tekton.dev/v1alpha1
        params:                #  指定要传递给 ClusterInterceptor 的参数的name/value键值对。
      params:                   # (可选)name/value键值对,指定Interceptor所需的参数;name字段采用字符串,而value字段采用有效的 JSON 对象
      - name: "secretRef"
        value:
          secretName: github-secret
          secretKey: secretToken
      - name: "eventTypes"
        value: ["pull_request"]

GitHub Interceptors

GitHub Interceptor包含验证和过滤 GitHub Webhooks 的逻辑。它可以验证 Webhook 的来源,并按您指定的条件过滤传入事件。GitHub Interceptor始终在其响应中保留有效负载数据(标头和正文)。

GitHub Interceptor 创建流程

1. 创建一个secret用于连接GitHub Webhook。 创建命令:openssl rand -base64 12
2. 配置 GitHub Webhook。
3. 创建 Kubernetes secret。
4. 将Kubernetes secret 传递给GitHub Interceptor。

添加更改的文件

GitHub Interceptor还可以添加一个逗号分隔的列表,其中包含了针对push和pull_request事件发生的所有更改(添加、修改或删除)的文件。更改的文件列表被添加到顶级扩展字段中事件有效负载的changed_files属性中。
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
            # execute only when a file within the controllers directory has changed
            value: extensions.changed_files.matches('controllers/')

GitHub Interceptor 示例

---
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: github-add-changed-files-pr-listener
spec:
  triggers:
    - name: github-add-changed-files-pr-listener
      interceptors:
        - ref:
            name: "github"
          params:
            - name: "eventTypes"
              value: ["pull_request", "push"]
            - name: "addChangedFiles"
              value:
                enabled: true
      bindings:
        - ref: github-add-changed-files-pr-pr-binding
      template:
        ref: github-add-changed-files-pr-template
  resources:
    kubernetesResource:
      spec:
        template:
          spec:
            serviceAccountName: tekton-triggers-example-sa
            containers:
              - resources:
                  requests:
                    memory: "64Mi"
                    cpu: "250m"
                  limits:
                    memory: "128Mi"
                    cpu: "500m"
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: github-add-changed-files-pr-pr-binding
spec:
  params:
    - name: changedfiles
      value: $(extensions.changed_files)

---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: github-add-changed-files-pr-template
spec:
  params:
    - name: changedfiles
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        generateName: github-add-changed-files-pr-run-
      spec:
        taskSpec:
          steps:
            - image: ubuntu
              script: |
                #! /bin/bash
                echo "Changed Files: $(tt.params.changedfiles)"

旧版 GitHub Interceptor 示例

triggers:
  - name: github-listener
      interceptors:
        - github:
            secretRef:
              secretName: github-secret
              secretKey: secretToken
            eventTypes: ["pull_request"]

GitLab Interceptors

GitLab Interceptor包含验证和过滤GitLab webhook的逻辑。它可以验证Webhooks中描述的webhook的来源,也可以根据您指定的标准过滤传入事件。GitLab Interceptor总是在其响应中保留有效负载数据(both header and body)。

GitLab Interceptor 创建流程

1. 创建一个secret用于连接GitHub Webhook。 创建命令:openssl rand -base64 12
2. 配置 GitHub Webhook。
3. 创建 Kubernetes secret。
4. 将Kubernetes secret 传递给GitHub Interceptor。

GitLab Interceptor 示例

apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: gitlabb-add-changed-files-pr-listener
spec:
  triggers:
    - name: gitlab-add-changed-files-pr-listener
      interceptors:
        - ref:
            name: "gitlab"
          params:
          - name: "secretRef"
            value:
              secretName: foo
              secretKey: bar
          - name: "eventTypes"
            value: ["Push Hook"]

旧版 GitLab Interceptor 示例

apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
  name: gitlab-listener-interceptor
spec:
  serviceAccountName: tekton-triggers-example-sa
  triggers:
    - name: foo-trig
      interceptors:
        - gitlab:
            secretRef:
              secretName: foo
              secretKey: bar
            eventTypes:
              - Push Hook
      bindings:
        - ref: pipeline-binding
      template:
        ref: pipeline-template

CEL Interceptors

CEL Interceptor允许使用 CEL 表达式语言过滤和修改传入事件的有效负载。
CEL Interceptors支持overlays,这是 Tekton Triggers 添加到顶级扩展字段中的事件负载的 CEL 表达式。可以从 TriggerBindings 访问overlays。

CEL Interceptors 添加字段示例

在下面的overlays定义示例中,Interceptor除了标准header和body字段之外,还向相应的 TriggerBinding 将接收的事件负载添加了两个新字段:extensions.truncated_sha和extensions.branch_name
triggers:
    - name: cel-trig
      interceptors:
        - ref:
            name: cel
          params:
          - name: "overlays"
            value:
            - key: truncated_sha
              expression: "body.pull_request.head.sha.truncate(7)"
            - key: branch_name
              expression: "body.ref.split('/')[2]"

CEL Interceptors 匹配字段示例

cel-trig-with-matches Trigger会过滤不具有与“pull_request”匹配的“X-GitHub-Event”标头的事件,并使用从钩子主体派生的截断字符串向负载的 JSON 主体添加额外的键:
triggers:
    - name: cel-trig-with-matches
      interceptors:
        - ref:
            name: "cel"
          params:
          - name: "filter"
            value: "header.match('X-GitHub-Event', 'pull_request')"
          - name: "overlays"
            value:
              - key: truncated_sha
                expression: "body.pull_request.head.sha.truncate(7)"
      bindings:
      - name: sha
        value: $(extensions.truncated_sha)

CEL Interceptors no-filter示例

filter表达式必须返回true,此Trigger才能执行并应用指定的overlays。还可以选择完全省略过滤表达式,在这种情况下,Interceptor将指定的overlays应用于有效负载的主体。
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: cel-eventlistener-no-filter
spec:
  serviceAccountName: tekton-triggers-example-sa
  triggers:
    - name: cel-trig
      interceptors:
        - ref:
            name: "cel"
          params:
            - name: "overlays"
              value:
                - key: extensions.truncated_sha
                  expression: "body.pull_request.head.sha.truncate(7)"
      bindings:
      - ref: pipeline-binding
      template:
        ref: pipeline-template

参考文档

https://tekton.dev/docs/triggers/interceptors/

标签:github,name,triggers,GitHub,Interceptors,value,Tekton,Trigger,Interceptor
From: https://www.cnblogs.com/wangguishe/p/17876611.html

相关文章

  • Tekton 认证配置
    Tenton支持Secret类型GitDockerkubernetes.io/basic-authkubernetes.io/ssh-authkubernetes.io/basic-authkubernetes.io/dockercfgkubernetes.io/dockerconfigjson配置Git身份验证TentonSecrets存储路径~/.gitconfig文件或~/.ssh目录。配置basic-auth......
  • Tekton pipelineruns 基础
    pipelineruns概述PipelineRun允许你在集群上实例化和执行Pipeline。一个Pipeline指定一个或多个Tasks,按照期望的执行顺序执行。PipelineRun按照指定的顺序执行Pipeline中的Tasks,直到所有Tasks都成功执行或失败。PipelineRun会自动为Pipeline中的每个Task创建相应的taskrun。pi......
  • Tekton Pipelines 基础
    Pipelines概述Pipeline是Tasks的集合,作为持续集成流的一部分,您可以定义并按照特定的执行顺序排列这些Tasks。Pipeline中的每个Tasks在Kubernetes集群上作为Pod执行。您可以配置各种执行条件来满足您的业务需求。Pipeline使用When表达式when表达式input:被评估的内容,支持使用......
  • Tekton 基础
    Tekton概述Tekton是用于构建CI/CD系统的云原生解决方案。它由TektonPipelines(提供构建块)和支持组件(例如TektonCLI和TektonCatalog)组成,使Tekton成为一个完整的生态系统。Tekton是Linux基金会项目CD基金会的一部分。Tekton作为Kubernetes集群上的扩展安装和运......
  • Tekton TaskRun 基础
    TaskRun概述TaskRun允许您在集群上实例化和执行Task。任务指定执行容器映像的一个或多个Steps,每个容器映像执行特定的构建工作。TaskRun按照指定的顺序执行任务中的Steps,直到所有Steps执行成功或失败。TaskRun配置清单apiVersion:tekton.dev/v1#指定API版本。kind:T......
  • Tekton Tasks 基础
    Tasks概述Task是一系列Step的组合,每个Step主要负责运行特定的构建或交付工具从而完成相关的一次特定事项;Task以Kubernetes集群上Pod运行。Task是名称空间级别的资源。Tasks组成Parameters:是使得Task及Pipeline资源定义出的“模板”更加具有通用性的关键要素之一Steps:具体执......
  • 部署 Tekton Triggers v0.25.3
    环境要求1.运行1.18或更高版本的Kubernetes集群;2.集群上要安装了TektonPipelines;部署TektonTriggers下载TektonTriggers#wgethttps://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml#wgethttps://storage.googleapis.com/tekton-relea......
  • 部署 Tekton Dashboard
    部署TektonDashboard下载TektonDashboard部署清单#wgethttps://storage.googleapis.com/tekton-releases/dashboard/latest/release.yaml替换gcr.io#sed-i'[email protected]@gcr.dockerproxy.com@g'release.yaml部署Tekton Dashboard#kubectlapply-frelease.yam......
  • Knative event Brokers and Triggers 事件传递模式实例
    BrokersandTriggers实例说明eventsource:gitlabsource基于MT通道的broker:defaulttriggertrigger-push->sinkevent-display-push过滤条件:dev.knative.sources.gitlab.pushtriggertrigger-tag-push->sinkevent-display-tag_push过滤条件:dev.knative.......
  • Quartz触发器CronTriggerBean 配置
    CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年;其中年不是必须的,也就是说任何一个表达式最少需要六项! 例:0012?*WED表示每个星期三的12点执行,这里没有“年”这项! 字段名(项) 必须 值范围 特殊字符 秒是0-59......