快速入门

本指南将帮助您快速上手 Tekton Triggers,通过创建一个简单的 "Hello World" 触发场景来展示其基本功能。

前置条件

  1. 环境要求

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

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

    • 需要命名空间管理员权限

创建示例项目

创建命名空间 (可选)

TIP

如果不想创建命名空间,您可以跳过此步骤,并且修改如下示例中的命名空间名称。

kubectl create namespace tekton-triggers-demo

创建服务账号和权限

创建文件 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

创建任务

创建文件 hello-task.yaml

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

创建触发器模板

创建文件 trigger-template.yaml

apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
  name: hello-template
  namespace: tekton-triggers-demo
spec:
  params:
    - name: message
      description: 要打印的消息
      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.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.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

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

发送测试请求

curl -v -H 'Content-Type: application/json' -d '{"message":"你好,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. 了解如何使用 设置事件监听器 进行常见的设置指令
  3. 设置并使用 Gitlab 事件 来触发管道

常见问题

  1. EventListener Pod 无法启动

    • 检查 RBAC 配置是否正确
    • 确认服务账号权限是否足够
  2. 触发器没有响应

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

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