乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • Kubernetes
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • Kubernetes
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

  • AIOps

  • Python

  • DevOps

    • Tekton

      • Tekton系列之安装篇
      • Tekton系列之理论篇
      • Tekton系列之实践篇-我的第一条Pipeline
      • Tekton系列之实践篇-把Jenkinsfile变成Tekton Pipeline
      • Tekton系列之实践篇-使用Jenkins来管理Tekton
      • Tekton系列之实践篇-使用Tekton Trigger使Tekton使用更简单
        • 什么是 Tekton Trigger?
        • Trigger CRD 对象
          • TriggerTemplate
          • TriggerBinding
          • Trigger
          • ClusterTriggerBinding
          • Interceptor
          • EventListener
        • Trigger 安装
        • 使用 Tekton Trigger
          • 定义 Trigger Template
          • 定义 Trigger Binding
          • 定义 EventListener
          • 创建 Webhook
      • Tekton系列之实践篇-Tekton和Argocd的梦幻联动
    • ArgoWorkflow

    • Gitlab

    • Ansible

  • Kubernetes

  • 专栏
  • DevOps
  • Tekton
乔克
2025-07-19
目录

Tekton系列之实践篇-使用Tekton Trigger使Tekton使用更简单

在《Tekton 实践篇-如何用 Jenkins 来管理 Tekton》我们介绍了如何使用 Jenkins 来管理 Tekton,这种方式是运维主动式管理,也就是需要运维去触发发布,哪有没有可能让自动触发 Tekton PipelineRun 的运行呢?

答案是有的,也就是这篇文章分享的 Tekton Trigger。

# 什么是 Tekton Trigger?

Tekton Trigger 是 Tekton 的一个组件,它可以从各种来源的事件中检测并提取需要信息,然后根据这些信息来运行 TaskRun 和 PipelineRun,还可以将提取出来的信息传递给它们以满足不同的运行要求。

其核心组件如下:

  • EventListener:时间监听器,是外部事件的入口 ,通常需要通过 HTTP 方式暴露,以便于外部事件推送,比如配置 Gitlab 的 Webhook。
  • Trigger:指定当 EventListener 检测到事件发生时会发生什么,它会定义 TriggerBinding、TriggerTemplate 以及可选的 Interceptor。
  • TriggerTemplate:用于模板化资源,根据传入的参数实例化 Tekton 对象资源,比如 TaskRun、PipelineRun 等。
  • TriggerBinding:用于捕获事件中的字段并将其存储为参数,然后会将参数传递给 TriggerTemplate。
  • ClusterTriggerBinding:和 TriggerBinding 相似,用于提取事件字段,不过它是集群级别的对象。
  • Interceptor:拦截器,在 TriggerBinding 之前运行,用于负载过滤、验证、转换等处理,只有通过拦截器的数据才会传递给 TriggerBinding。

工作原理图如下:

ff71827511717ec97421bfaa27b7f852 MD5

下面会详细介绍 Trigger 的 CRD 对象。

# Trigger CRD 对象

# TriggerTemplate

TriggerTemplate 可以模块化 Tekton 资源的资源,可以使传入的参数在资源模板中的任何位置被使用,它就好比我们定义了一个对象,这个对象可以接收外部的参数,在对象内部把接收到的参数再传递给 Tekton 资源对象进行使用。

TriggerTemplate 的定义很简单,如下:

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: pipeline-template
spec:
  params: # 参数的定义,从外部接收的参数
    - name: gitrevision
      description: The git revision
      default: main
    - name: gitrepositoryurl
      description: The git repository url
    - name: message
      description: The message to print
      default: This is the default message
    - name: contenttype
      description: The Content-Type of the event
  resourcetemplates: # 资源模板,将参数传递给资源模板,实例化一个PipelineRun对象
    - apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        generateName: simple-pipeline-run-
      spec:
        pipelineRef:
          name: simple-pipeline
        params:
          - name: message
            value: $(tt.params.message)
          - name: contenttype
            value: $(tt.params.contenttype)
        resources:
          - name: git-source
            resourceSpec:
              type: git
              params:
                - name: revision
                  value: $(tt.params.gitrevision)
                - name: url
                  value: $(tt.params.gitrepositoryurl)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

从上面可以看出,resourcetemplates字段中就是定义的资源模板,上面定义的 PipelineRun 的资源,里面的语法和定义一个 PipelineRun CRD 一致,就像 Deployment 的 Template 中定义的 Pod 资源和单独定义 Pod 资源的语义一样。

而params字段定义我们需要从外部获得的参数,这个参数后续会传递给resourcetemplates以完成其资源实例化。

# TriggerBinding

TriggerBinding 用于将事件进行绑定,通过捕获事件中的字段并将其存储为参数。

其定义方式如下:

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: pipeline-binding
spec:
  params:
    - name: gitrevision
      value: $(body.head_commit.id)
    - name: gitrepositoryurl
      value: $(body.repository.url)
    - name: contenttype
      value: $(header.Content-Type)
1
2
3
4
5
6
7
8
9
10
11
12

TriggerBinding 接收从 EventListener 传递过来的参数,然后传给 TriggerTemplate,在 TriggerTemplate 上实例化资源对象。

TriggerBinding 提供 TriggerTemplate 需要的参数,参数以 key-value 的方式存储并传递。其中的 value 是通过$()中包裹得JSONPath表达式来提取(https://tekton.dev/docs/triggers/triggerbindings/ (opens new window))。

# Trigger

用于指定当事件发生时需要做什么,它会定义 TriggerBinding、TriggerTemplate 以及可选的 Interceptor。

如下:

apiVersion: triggers.tekton.dev/v1beta1
kind: Trigger
metadata:
  name: trigger
spec:
  interceptors:
    - ref:
        name: "cel"
      params:
        - name: "filter"
          value: "header.match('X-GitHub-Event', 'pull_request')"
        - name: "overlays"
          value:
            - key: extensions.truncated_sha
              expression: "body.pull_request.head.sha.truncate(7)"
  bindings:
    - ref: pipeline-binding
  template:
    ref: pipeline-template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

上面定义了interceptors、bindings、template,一当 EventListener 收到事件,就会触发这个 Trigger,先经过interceptors进行拦截筛选,然后再传给bindings和template。

# ClusterTriggerBinding

ClusterTriggerBinding 和 TriggerBinding 功能一样,从名字就可以看到,ClusterTriggerBinding 是集群级别的,可以作用于任何 namespace。

其定义和 TriggerBinding 一样,如下:

apiVersion: triggers.tekton.dev/v1beta1
kind: ClusterTriggerBinding
metadata:
  name: pipeline-clusterbinding
spec:
  params:
    - name: gitrevision
      value: $(body.head_commit.id)
    - name: gitrepositoryurl
      value: $(body.repository.url)
    - name: contenttype
      value: $(header.Content-Type)
1
2
3
4
5
6
7
8
9
10
11
12

# Interceptor

Interceptor 是在 TriggerBinding 运行之前的事件处理器,可以做一些预处理,比如账户密码验证,再比如一些事件方式验证,如 gitlab 的 push event。只有通过了 Interceptor,才会把有效数据传递给 TriggerBinding。

Tekton Trigger 目前支持两种 Interceptor 的实现方式:

  • 独立 Interceptor
  • 传统 Interceptor(将被废弃)

独立 Interceptor 是 ClusterInterceptor 自定义资源的实例,可以在下面介绍的 EventListener 中引用这些 Interceptor 以及所需的参数。传统的 Interceptor 就是在 EventListener 中完全定义,不过这种方式将被废弃。

目前已经内置了以下 Interceptor:

  • Webhook Interceptor
  • Github Interceptor
  • Gitlab Interceptor
  • Bitbucket Interceptor
  • CEL Interceptor

这里以 Gitlab Interceptor 为例。Gitlab Interceptor 包括验证和过滤的逻辑,它可以验证 Webhook 的来源,也可以验证指定标准过滤传入的事件。如下:

interceptors:
  - ref:
      name: "gitlab"
    params:
      - name: "secretRef"
        value:
          secretName: foo
          secretKey: bar
      - name: "eventTypes"
        value: ["Push Hook"]
1
2
3
4
5
6
7
8
9
10

也可以直接在 EventListener 中定义,如下:

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# EventListener

EventListener 是一个 Kubernetes 对象,用于监听 Kubernetes 上指定端口的事件,然后会接收传入的事件并指定一个或多个触发器。

EventListener 实际上是 Tekton 的另一种客户端形式,只是它是基于 HTTP 事件的,通过 HTTP 的方式可以绕过常规的认证路径,比如 kubeconfig 等,我们知道,任何需要通过 kube-apiserver 的事件都需要认证、鉴权等一系列操作,那 HTTP 方式是如何实现的呢?我们在创建一个简单的 nginx deployment 的时候,可以看到 yaml 文件里会自动生成一个 default 的 serviceaccount,这个 default 就是用于认证、鉴权的。所以要使用 EventListener,就需要让它拥有自己的 serviceaccount,并且这个 serviceaccount 需要 Tekton 资源操作的权限才能让 Event 正常的和 Tekton 进行交互。

EventListener 的定义示例如下:

apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
  name: gitlab-listener
spec:
  serviceAccountName: tekton-triggers-example-sa
  triggers:
    - name: gitlab-push-events-trigger
      interceptors:
        - name: "verify-gitlab-payload"
          ref:
            name: "gitlab"
            kind: ClusterInterceptor
          params:
            - name: secretRef
              value:
                secretName: "gitlab-secret"
                secretKey: "secretToken"
            - name: eventTypes
              value:
                - "Push Hook"
      bindings:
        - name: gitrevision
          value: $(body.checkout_sha)
        - name: gitrepositoryurl
          value: $(body.repository.git_http_url)
      template:
        spec:
          params:
            - name: gitrevision
            - name: gitrepositoryurl
          resourcetemplates:
            - apiVersion: tekton.dev/v1alpha1
              kind: TaskRun
              metadata:
                generateName: gitlab-run-
              spec:
                taskSpec:
                  inputs:
                    resources:
                      - name: source
                        type: git
                  steps:
                    - image: ubuntu
                      script: |
                        #! /bin/bash
                        ls -al $(inputs.resources.source.path)
                inputs:
                  resources:
                    - name: source
                      resourceSpec:
                        type: git
                        params:
                          - name: revision
                            value: $(tt.params.gitrevision)
                          - name: url
                            value: $(tt.params.gitrepositoryurl)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

# Trigger 安装

上面简单介绍了一下 Trigger 的常用功能,更多的可以到官方文档(https://tekton.dev/docs/triggers/ (opens new window))进行学习。

下面我们将正式的把之前的 Pipeline 流程接入 Trigger,实现开发人员推送代码,通过 Webhook 自动触发对应的 PipelineRun。

首先我们需要安装 Trigger(https://tekton.dev/docs/triggers/install/ (opens new window))。

安装的时候选择对应的版本安装,如果 Kubernetes 集群版本太低,会导致安装失败。

kubectl apply --filename https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
kubectl apply --filename https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml
1
2

不过由于网络原因,直接按着官方文档进行安装是下载不了,我将自己用到的上传到了仓库(https://gitee.com/coolops/tekton-install/tree/master/trigger (opens new window)),有需要的自己去下载。

安装完成后,可以看到如下 Pod。

# kubectl get po -n tekton-pipelines
NAME                                                 READY   STATUS    RESTARTS   AGE
tekton-dashboard-565c78b68d-6fjdz                    1/1     Running   12         32d
tekton-pipelines-controller-75c456df85-qxvq2         1/1     Running   5          32d
tekton-pipelines-webhook-5bc8d6b7c4-w6pdn            1/1     Running   5          32d
tekton-triggers-controller-686c6c8f79-fp7wd          1/1     Running   0          9m37s
tekton-triggers-core-interceptors-5d77595f79-8q9hb   1/1     Running   0          10s
tekton-triggers-webhook-76c55d6799-h997b             1/1     Running   0          9m36s
1
2
3
4
5
6
7
8

# 使用 Tekton Trigger

上面已经安装好了 Tekton Trigger,下面我们将正式接入 Tekton Trigger 实现自动持续部署。

# 定义 Trigger Template

回看《Tekton 系列之实践篇-由 Jenkins 改成 Tekton》中的 PipelineRun 的 YAML 文件,可以看到有参数 revision、git_url、imageUrl、imageTag、namespace 等,所以在定义 Trigger Template 的时候需要这些参数传递进去。

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: trigger-rd-pipeline-template
spec:
  params:
    - name: gitrevision
      description: The git revision
      default: master
    - name: gitrepositoryurl
      description: The git repository url
    - name: namespace
      description: The namespace to create the resources
      default: tekton-devops-pipeline
    - name: projectname
      description: The project name
    - name: imagetag
      description: The image tag
      default: latest
  resourcetemplates:
    - apiVersion: tekton.dev/v1alpha1
      kind: PipelineRun
      metadata:
        name: rd-pipeline-run-$(uid)
        namespace: $(tt.params.namespace)
      spec:
        serviceAccountName: tekton-build-sa
        params:
          - name: revision
            value: $(tt.params.gitrevision)
          - name: git_url
            value: $(tt.params.gitrepositoryurl)
          - name: imageUrl
            value: registry.cn-hangzhou.aliyuncs.com/coolops/$(tt.params.projectname)
          - name: imageTag
            value: latest
          - name: pathToDockerfile
            value: Dockerfile
          - name: chart_username
            value: AoWepE
          - name: chart_password
            value: XnifbX36lQ
          - name: app_name
            value: hello-world
          - name: namespace
            value: default
          - name: sonar_username
            value: admin
          - name: sonar_password
            value: Joker@123456
          - name: sonar_url
            value: http://sonarqube.coolops.cn
        pipelineRef:
          name: rd-pipeline
        workspaces:
          - name: rd-repo-pvc
            volumeClaimTemplate:
              spec:
                accessModes:
                  - ReadWriteOnce
                storageClassName: local
                resources:
                  requests:
                    storage: 1Gi
          - name: docker-config
            secret:
              secretName: docker-config
          - name: kubernetes-config
            secret:
              secretName: kubernetes-config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

# 定义 Trigger Binding

Trigger Template 的入参都可以通过 PushEvent 中获取,PushEvent 里的数据需要通过 Trigger Binding 来绑定。

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: trigger-rd-pipeline-bingding
  namespace: tekton-devops-pipeline
spec:
  params:
    - name: gitrevision
      value: $(body.ref)
    - name: namespace
      value: tekton-devops-pipeline
    - name: gitrepositoryurl
      value: $(body.project.git_http_url)
    - name: projectname
      value: $(body.project.name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 定义 EventListener

上面创建好 Trigger Template 和 Trigger Binding,接下来就是创建 EventListener,把 Template 和 Binding 关联起来。

apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: trigger-rd-pipeline-eventlistener
spec:
  serviceAccountName: tekton-triggers-gitlab-sa
  triggers:
    - bindings:
        - ref: trigger-rd-pipeline-bingding
      template:
        ref: trigger-rd-pipeline-template
1
2
3
4
5
6
7
8
9
10
11

这里的tekton-triggers-gitlab-sa是需要我们创建的,如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tekton-triggers-gitlab-sa
secrets:
- name: gitlab-secret
- name: gitlab-auth
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tekton-triggers-gitlab-minimal
rules:
  # Permissions for every EventListener deployment to function
  - apiGroups: ["triggers.tekton.dev"]
    resources: ["eventlisteners", "triggerbindings", "triggertemplates","clustertriggerbindings", "clusterinterceptors","triggers"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    # secrets are only needed for Github/Gitlab interceptors, serviceaccounts only for per trigger authorization
    resources: ["configmaps", "secrets", "serviceaccounts"]
    verbs: ["get", "list", "watch"]
  # Permissions to create resources in associated TriggerTemplates
  - apiGroups: ["tekton.dev"]
    resources: ["pipelineruns", "pipelineresources", "taskruns"]
    verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tekton-triggers-gitlab-binding
subjects:
  - kind: ServiceAccount
    name: tekton-triggers-gitlab-sa
    namespace: tekton-devops-pipeline
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: tekton-triggers-gitlab-minimal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

现在需要新增一个 Gitlab 的 Webhook 的 Secret Token,如下:

apiVersion: v1
kind: Secret
metadata:
  name: gitlab-secret
type: Opaque
stringData:
  secretToken: "coolops"
1
2
3
4
5
6
7

当创建完 EventListener 过后,会在当前 namespace 下生成一个 service 和 deployment,如下:

# kubectl get all | grep event
pod/el-trigger-rd-pipeline-eventlistener-674768c8d5-p8z66             2/2     Running     2          128m
service/el-trigger-rd-pipeline-eventlistener   ClusterIP   10.98.84.33      <none>        8080/TCP   128m
deployment.apps/el-trigger-rd-pipeline-eventlistener   1/1     1            1           128m
replicaset.apps/el-trigger-rd-pipeline-eventlistener-674768c8d5   1         1         1       128m
1
2
3
4
5

我们需要把这个 service 暴露出去,创建 Ingress 如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: el-trigger-test-eventlistener
spec:
  rules:
    - host: hello-word.webhook.coolops.cn
      http:
        paths:
          - backend:
              serviceName: el-trigger-rd-pipeline-eventlistener
              servicePort: 8080
1
2
3
4
5
6
7
8
9
10
11
12

# 创建 Webhook

上面已经把 EventListener 暴露出来了,下面就在代码仓库中创建 Webhook。

由于我的代码放在私有 Gitlab 中的,配置如下(由于内网,就直接使用了 NodePort 暴露 EventListener):

6049de8785718ed4fb7e907983d26369 MD5

然后可以测试一下,并查看更多的信息。

6753037f8e68ccc5f29abb634618cd9d MD5

需要的信息都是从 Request 中获取,如下:

{
  "object_kind": "push",
  "event_name": "push",
  "before": "77e1901516fc2ee1a47b03bb4bfc63ca02e6b23d",
  "after": "ac84d875c6094b5feebd477809a2021fd745c9df",
  "ref": "refs/heads/master",
  "checkout_sha": "ac84d875c6094b5feebd477809a2021fd745c9df",
  "message": null,
  "user_id": 1,
  "user_name": "Administrator",
  "user_username": "root",
  "user_email": "",
  "user_avatar": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
  "project_id": 2,
  "project": {
    "id": 2,
    "name": "Devops Hello World",
    "description": "",
    "web_url": "http://192.168.205.128/root/devops-hello-world",
    "avatar_url": null,
    "git_ssh_url": "git@192.168.205.128:root/devops-hello-world.git",
    "git_http_url": "http://192.168.205.128/root/devops-hello-world.git",
    "namespace": "Administrator",
    "visibility_level": 0,
    "path_with_namespace": "root/devops-hello-world",
    "default_branch": "master",
    "ci_config_path": null,
    "homepage": "http://192.168.205.128/root/devops-hello-world",
    "url": "git@192.168.205.128:root/devops-hello-world.git",
    "ssh_url": "git@192.168.205.128:root/devops-hello-world.git",
    "http_url": "http://192.168.205.128/root/devops-hello-world.git"
  },
  "commits": [
    {
      "id": "ac84d875c6094b5feebd477809a2021fd745c9df",
      "message": "ceshi ",
      "title": "ceshi ",
      "timestamp": "2022-03-30T08:54:11+00:00",
      "url": "http://192.168.205.128/root/devops-hello-world/-/commit/ac84d875c6094b5feebd477809a2021fd745c9df",
      "author": {
        "name": "coolops",
        "email": "baidjay@163.com"
      },
      "added": [

      ],
      "modified": [
        "Jenkinsfile"
      ],
      "removed": [

      ]
    },
    {
      "id": "cc36ed8cf920d9a3470fda6a28576ba7d29f9c04",
      "message": "ceshi ",
      "title": "ceshi ",
      "timestamp": "2022-03-30T08:52:13+00:00",
      "url": "http://192.168.205.128/root/devops-hello-world/-/commit/cc36ed8cf920d9a3470fda6a28576ba7d29f9c04",
      "author": {
        "name": "coolops",
        "email": "baidjay@163.com"
      },
      "added": [

      ],
      "modified": [
        "Jenkinsfile"
      ],
      "removed": [

      ]
    },
    {
      "id": "77e1901516fc2ee1a47b03bb4bfc63ca02e6b23d",
      "message": "多分支发布",
      "title": "多分支发布",
      "timestamp": "2022-03-30T08:45:11+00:00",
      "url": "http://192.168.205.128/root/devops-hello-world/-/commit/77e1901516fc2ee1a47b03bb4bfc63ca02e6b23d",
      "author": {
        "name": "coolops",
        "email": "baidjay@163.com"
      },
      "added": [

      ],
      "modified": [
        "Jenkinsfile"
      ],
      "removed": [

      ]
    }
  ],
  "total_commits_count": 3,
  "push_options": {
  },
  "repository": {
    "name": "Devops Hello World",
    "url": "git@192.168.205.128:root/devops-hello-world.git",
    "description": "",
    "homepage": "http://192.168.205.128/root/devops-hello-world",
    "git_http_url": "http://192.168.205.128/root/devops-hello-world.git",
    "git_ssh_url": "git@192.168.205.128:root/devops-hello-world.git",
    "visibility_level": 0
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

需要什么就从 Request 中取什么。这样就可以通过 WebHook 触发一条 Tekton 流水线。

可以看到流水线正常运行了。

92ed18aa6d8948c59d10d0337cf4a589 MD5

到目前为止,就可以实现代码提交到 Gitlab,然后通过 Webhook 自动触发 Tekton Pipeline 了。

上次更新: 2025/07/19, 11:33:23
Tekton系列之实践篇-使用Jenkins来管理Tekton
Tekton系列之实践篇-Tekton和Argocd的梦幻联动

← Tekton系列之实践篇-使用Jenkins来管理Tekton Tekton系列之实践篇-Tekton和Argocd的梦幻联动→

最近更新
01
读《额尔古纳河右岸》有感
07-19
02
读《命运》有感
07-19
03
读《月亮与六便士》有感
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式