Tekton 流水线
K8s 原生 CI/CD,Task、Pipeline 和 Run 作为 CRD。
CI/CD高级
为什么
Tekton 是 K8s 原生 CI/CD — Task 和 Pipeline 是 CRD,运行是 pod。云原生、可扩展,集成 ArgoCD/Flux 做 GitOps。
DORA 2024 DevOps 状态报告显示精英团队部署频率比低绩效团队高 973 倍。带自动化测试的 CI/CD 管道将变更失败率降至 5-15%,而手动部署为 40-60%。
何时使用
K8s 原生 CI/CD 用 Tekton。非 K8s 避免(用 GH Actions)。
如何做
1. 安装 — tekton-pipelines 控制器
2. Task — 容器中可复用步骤
3. Pipeline — Task 图
4. 资源 — git 输入、镜像输出
5. 运行 — PipelineRun 触发执行
6. 目录 — tekton catalog 可复用 task
7. 触发 — 事件监听器 webhook
示例
# task.yaml — npm test
apiVersion: tekton.dev/v1beta1
kind: Task
metadata: { name: npm-test }
spec:
steps:
- image: node:20
script: |-
npm ci
npm test
# pipeline.yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata: { name: ci }
spec:
tasks:
- name: test
taskRef: { name: npm-test }
- name: build
runAfter: [test]
taskRef: { name: npm-build }
# 运行流水线
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata: { name: ci-run }
spec: { pipelineRef: { name: ci } }
常见问题
- ⚠Task 失败 — 查 pod 日志,kubectl logs -n tekton-pipelines
- ⚠无 git 资源 — 用 catalog 中 git-clone task
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓用 Tekton Catalog task — 可复用、社区维护
- ✓共享存储用 workspace — 经 PVC 在 task 间传递
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求