1. 心智模型:一切都是 Kubernetes 对象
Tekton Pipelines 以一组 Custom Resource Definition (CRD) 扩展 API:Task 描述可复用动作, Pipeline 把多个 Task 连成有向无环图;真正干活的是 TaskRun / PipelineRun——它们像 Job 一样被创建一次、产生 Pod、留下状态。 控制器持续 reconcile:根据 Run 的 spec 创建 Pod、更新 status、处理失败策略。
2. Task:步骤 = 容器
spec.steps 列表中的每一项在 Pod 里对应一个容器(外加 Tekton 注入的初始化逻辑)。可用 script 或 command; 镜像需能在你的集群里拉取到。params 声明输入,在步骤里用 $(params.NAME) 引用(以集群上 Tekton 版本文档为准)。
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: say-message
spec:
params:
- name: message
type: string
default: "hello tekton"
steps:
- name: echo
image: alpine:3.19
script: |
echo "$(params.message)"
3. Pipeline:DAG 与 runAfter
Pipeline 的 spec.tasks 列出多个任务实例,可用 runAfter 声明依赖; 亦支持更复杂的 when 条件(版本功能以文档为准)。taskRef 引用已安装的 Task 名称,或用 taskSpec 内联定义(适合快速试验)。
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: build-and-notify
spec:
params:
- name: git-url
type: string
tasks:
- name: clone
taskRef:
name: git-clone-task
params:
- name: url
value: $(params.git-url)
- name: unit-test
runAfter: ["clone"]
taskRef:
name: unit-test-task
4. PipelineRun:参数从哪来?
创建 PipelineRun 时,在 spec.params 传入具体值;可由人、CI 系统、或 Tekton Triggers(另立话题)根据 Git 事件注入。 参数类型常见为 string、array;校验失败会在 Run status 里体现。
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
generateName: demo-run-
spec:
pipelineRef:
name: build-and-notify
params:
- name: git-url
value: "https://github.com/org/sample.git"
5. tkn:把运行体验拉回终端
Tekton CLI (tkn) 可列出 Task/Pipeline、启动 Run、跟踪日志,适合与 kubectl 并列放在平台工程师工具箱。
# Examples (see tkn --help for your version)
tkn pipeline start build-and-notify --showlog
tkn pipelinerun logs -f -n tekton-pipelines
6. 与 Jenkins / GitLab CI 的站位差异
| 维度 | Tekton | 传统 CI |
|---|---|---|
| 执行单元 | K8s Pod / 容器 | Agent / Runner VM |
| 配置形态 | YAML CRD,gitops 友好 | XML / Groovy / YAML 依产品 |
| 扩展点 | 控制器、自定义 Task、云原生生态 | 插件市场、脚本自由度 |
7. 本章清单
- 在测试集群安装 Tekton Pipelines;用 kubectl get crd | findstr tekton(或 grep)确认 CRD。
- 应用最小 Task,再创建 TaskRun,观察 Pod 与日志。
- 编写含两个 Task 的 Pipeline,用 runAfter 串起来,再创建 PipelineRun 传参。
- 安装 tkn,用命令行跟踪一次完整运行。
- 阅读官方文档中 params 类型与验证规则,为下一章 workspaces 做准备。