快速开始

本指南将帮助您通过创建一个简单的“Hello World”触发器场景来入门 Tekton Triggers,以演示其基本功能。

目录

前提条件

  1. 环境要求

    • Kubernetes 版本 1.21 或更高
    • 已安装 Tekton Operator
    • 通过 Operator 确保 Tekton Triggers 已安装并准备就绪
  2. 所需工具

    • kubectl 命令行工具
    • curl(用于测试触发器)
  3. 权限

    • 需要 namespace 管理员权限

创建示例项目

创建 Namespace(可选)

TIP

如果您不想创建新的 namespace,可以跳过此步骤,并在下面的示例中修改 namespace 名称。

kubectl create namespace tekton-triggers-demo

创建 Service Account 和权限

创建文件 rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tekton-triggers-example-sa
  namespace: tekton-triggers-demo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: tekton-triggers-example-binding
  namespace: tekton-triggers-demo
subjects:
  - kind: ServiceAccount
    name: tekton-triggers-example-sa
    namespace: tekton-triggers-demo
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: tekton-triggers-eventlistener-roles
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tekton-triggers-example-clusterbinding
subjects:
  - kind: ServiceAccount
    name: tekton-triggers-example-sa
    namespace: tekton-triggers-demo
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: tekton-triggers-aggregate-view

应用配置

kubectl apply -f rbac.yaml

创建 Hello World TaskRun

创建 Task

创建文件 hello-task.yaml

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello-task
  namespace: tekton-triggers-demo
spec:
  params:
    - name: message
      description: Message to print
      type: string
      default: "Hello World!"
  steps:
    - name: echo
      image: alpine
      script: |
        echo "$(params.message)"

创建 Trigger Template

创建文件 trigger-template.yaml

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: hello-template
  namespace: tekton-triggers-demo
spec:
  params:
    - name: message
      description: Message to print
      default: "Hello World!"
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        generateName: hello-run-
        namespace: tekton-triggers-demo
      spec:
        taskRef:
          name: hello-task
        params:
          - name: message
            value: $(tt.params.message)

创建 Trigger Binding

创建文件 trigger-binding.yaml

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerBinding
metadata:
  name: hello-binding
  namespace: tekton-triggers-demo
spec:
  params:
    - name: message
      value: $(body.message)

创建 Event Listener

创建文件 event-listener.yaml

apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
  name: hello-listener
  namespace: tekton-triggers-demo
spec:
  serviceAccountName: tekton-triggers-example-sa
  triggers:
    - name: hello-trigger
      bindings:
        - ref: hello-binding
      template:
        ref: hello-template

应用配置

应用所有创建的资源:

kubectl apply -f hello-task.yaml
kubectl apply -f trigger-template.yaml
kubectl apply -f trigger-binding.yaml
kubectl apply -f event-listener.yaml

测试触发器

获取 EventListener URL

# 等待 Pod 准备就绪
kubectl get pods -n tekton-triggers-demo

# 获取服务地址
export EL_URL=$(kubectl get el hello-listener -n tekton-triggers-demo -o jsonpath='{.status.address.url}')
TIP

不同的集群网络配置可能导致无法直接使用该地址。如果遇到问题,请联系您的平台管理员。

如果仅需测试,可以在集群内部访问该地址,或使用 kubectl port-forward -n <namespace> svc/<service-name> <svc-port>:<local-port> 将地址转发到本地机器。

发送测试请求

curl -v -H 'Content-Type: application/json' -d '{"message":"Hello, Tekton!"}' $EL_URL

查看结果

# 查看创建的 TaskRun
kubectl get taskrun -n tekton-triggers-demo

# 查看指定 TaskRun 的日志
kubectl logs -l eventlistener=hello-listener -n tekton-triggers-demo

清理资源

测试完成后,您可以删除创建的资源:

kubectl delete namespace tekton-triggers-demo

后续步骤

现在您已成功创建并测试了一个基础的 Tekton Triggers 示例,您可以:

  1. 探索 Tekton Triggers 的概念
  2. 学习如何使用 Setup EventListeners 进行常见设置
  3. 配置并使用 Gitlab events 来触发流水线

常见问题

  1. EventListener Pod 启动失败

    • 检查 RBAC 配置是否正确
    • 确认 Service Account 是否具有足够权限
  2. 触发器无响应

    • 验证 EventListener 服务是否可访问
    • 检查请求格式是否正确
    • 查看 EventListener Pod 日志
  3. TaskRun 未创建

    • 确认 TriggerTemplate 配置是否正确
    • 检查 TriggerBinding 中的参数映射
    • 查看 EventListener 的错误日志