如果一开始就问“Tekton 能取代 Jenkins 吗?”,它很容易被读错。有些场景里答案成立,但这个问题会遮住真正的迁移内容。Tekton 的核心形态更接近一组 Kubernetes 自定义资源,它把构建和交付工作声明为集群原生对象:Task、TaskRun、Pipeline、PipelineRun、事件触发、结果存储,以及供应链签名相关的接口面。[1][2][4][5][6]
截至 2026-06-04T22:32:41Z UTC,通过 GitHub API 看到,tektoncd/pipeline 仓库有 8,981 stars、1,925 forks、549 open issues,push 时间戳为 2026-06-04T18:42:12Z。[8] 最新 GitHub release 是 v1.13.0,发布于 2026-05-29。[7] 这些数字本身不能构成普遍采用的理由。它们是一项新鲜度检查,针对的是一个直接位于构建路径上的项目;在这个位置上,陈旧的控制器、含混的 CRD 版本边界和薄弱的运营所有权,很快就会变成生产摩擦。
图片语境:封面避开了产品标记和抽象 CI/CD 视觉。混合服务器机架更贴近本文的问题层级,因为这里讨论的是运营问题:当 CI/CD 工作变成 Kubernetes 工作之后,困难部分会落在执行位置、网络访问、存储、凭据、清理和审计轨迹上。[9]
迁移从工作单元开始
Tekton 的概念模型把 Task 定义为一组步骤,每个步骤都以容器形式运行在 Kubernetes pod 中。[1] 这个细节是采用 Tekton 的关键支点。Tekton task 已经脱离藏在中央 CI 服务器里的 shell 阶段形态,更接近一份 pod 形态的执行契约,包含镜像、脚本、参数、workspaces、results、sidecars、service-account 权限,以及 Kubernetes 调度带来的后果。[1][2]
当平台团队已经希望 CI/CD 工作靠近 Kubernetes 原语时,这一点会让 Tekton 变得有吸引力。构建步骤可以使用普通容器镜像。凭据可以通过 Kubernetes service accounts 和 secrets 接入。Workspace volumes 可以把源码树、缓存或中间文件暴露给合适的步骤。Task results 可以把小型字符串值传递给后续任务;更大的载荷应当通过 workspace 或外部存储流转,避免把 result 通道当作大型数据通道使用。[2]
随意迁移也常在这里失败。如果团队把一个巨大的 Jenkinsfile 直接搬成一个巨大的 Tekton task,旧的控制面会被保留下来,同时又叠加了 Kubernetes 复杂度。成熟的迁移会把工作拆成能够独立复用和审查的 task 契约:clone、test、build image、scan、sign、publish、deploy。拆分边界应当跟随所有权和数据边界,超出可视化流水线方框本身。
实用规则很直接:用 Results 传递引导图结构的小事实,用 Workspaces 承载共享文件,用外部制品存储保存真正的构建输出。[2] 如果每个 task 都把内容写进同一个大型共享 workspace,并依赖松散约定,pipeline 就会变成带 YAML 开销的远程 shell 脚本。当 task 之间移动的数据足够明确,使另一个团队能够安全复用或替换其中一块时,Tekton 的价值才会显现。
Pipelines 是图结构,超出阶段列表
Pipeline 汇集 tasks,并描述它们之间的关系。文档把 pipelines 描述为一组 tasks,其顺序可以通过依赖、runAfter、task results、parameters、workspaces 和其他执行控制来管理。[3] 对任何 CI 用户而言,这听起来很熟悉,但 Kubernetes 原生形态会改变维护模型。
在经典 CI 服务器中,pipeline 引擎拥有整个运行时。在 Tekton 中,pipeline controller 会调谐 Kubernetes resources,并由这些 resources 创建 pods 和相关对象。这意味着故障更容易用集群工具检查,同时也会继承集群层面的关注点:namespace 边界、RBAC、pod security、node capacity、image pull policy、PVC 行为、清理和 controller 升级。[1][3]
这是采用 Tekton 的第一个决策点。当平台团队希望 CI/CD 成为既有工作负载控制平面的一部分时,Tekton 很适合。若组织真正需要的是一个内置能力齐全的 CI appliance,配有厚重 UI、托管 runner fleet,并尽量减少集群运营,Tekton 的优势会减弱。Tekton 通过暴露机制提供灵活性。暴露出来的机制仍然需要明确负责人。
因此,最好的早期 pipeline 应该平淡且窄。选择一个服务、一条镜像构建路径、一条部署通道。把 tasks 定义为可复用契约。让第一条 pipeline 足够短,使每个 workspace、result、parameter 和 credential 都能在评审中解释清楚。随后,只有在简单路径可观测之后,再加入 fan-out、matrix behavior 或跨仓库编排。
Triggers 是 webhook 边界,不能当作魔法前门
Tekton Triggers 增加了事件入口层。它的文档把 EventListener 描述为一种 Kubernetes object:监听事件,然后使用 Triggers、TriggerBindings、TriggerTemplates 和可选的 Interceptors 抽取 payload 字段,并实例化 TaskRuns 或 PipelineRuns。[4]
这种能力很强,但应当按暴露边界来对待。Webhook payload 不只是一个方便的启动按钮。它是不受信任的输入,可以选择 revisions、repositories、environments 或 deployment paths。TriggerBindings 把 event data 映射为 parameters。TriggerTemplates 把这些 parameters 转换成 run objects。Interceptors 可以在创建 run 之前过滤、验证或转换 payloads。[4]
对采用过程而言,这意味着 trigger 层需要得到和 API endpoint 相同的设计关注。哪个 service account 创建 runs?哪些 namespaces 被允许?哪些 repositories 可以触发生产 pipelines?payload 中哪些字段可信,哪些字段要在 server-side 解析?当 run 没有被创建时,哪些 events 会被记录下来用于调试?Tekton 没有消除这些问题。它把这些问题放进 Kubernetes resources 里。
清晰的迁移路径,是先手动创建 PipelineRuns,等 run contract 稳定后再添加 Triggers。如果团队还解释不清一次 manual run,加入 webhook 自动化只会让故障更难拆分:问题究竟在 pipeline、event payload、binding、template、interceptor,还是 permissions?
Results 和 Chains 标记成熟度分界线
Tekton Results 和 Tekton Chains 有用,正是因为基础 pipeline 执行还不足以支撑严肃的交付系统。Results 旨在归组 CI/CD workload history,并把长期 result storage 从 Pipeline controller 中分离出来,使已完成的 TaskRun 和 PipelineRun objects 可以被清理,同时 run records 和 logs 仍可在其他位置查询。[5] 这一点很重要,因为 Kubernetes etcd 不能承担无限 CI history database 的角色。
Chains 处理的是另一个边界。它的文档描述了一个 controller:观察已完成的 TaskRuns 和 PipelineRuns,为它们创建快照,把数据转换成标准 payload formats,完成签名,并把 signatures 或 attestations 存入已配置的 backends。[6] 这会把 Tekton 从“运行这些步骤”推进到“产出证据,说明运行了什么、产生了什么 artifact,以及这些证据如何被验证”。[6]
这些组件不应被当作装饰。Results 会提出谁拥有 run history、retention 和 query access。Chains 会提出谁拥有 key management、attestation policy、artifact identity 和 downstream verification。小团队可以在验证执行模型时暂缓两者。受监管或对供应链敏感的团队应当尽早设计它们,因为等 pipelines 扩散之后再补 audit trails,通常比多加一个 task 更困难。
Tekton 适合哪里
Tekton 最适合已经能良好运维 Kubernetes,并希望 CI/CD 共享这套运营基础的平台代理团队。它契合那些重视可复用 task 契约、pod-level execution control、cluster-local credentials、Kubernetes-native audit surfaces,并希望把 event triggers、result storage 和 signed attestations 作为一等组件逐步加入的组织。[1][4][5][6]
当真实需求是一个尽量减少平台所有权的 hosted CI service 时,Tekton 会显得较弱。Tekton 不会抹去 runner capacity planning、image hygiene、secret boundaries、log retention、UI expectations 或 developer support 的需求。它会让这些责任更明确。只有团队准备好承担这些责任,这才是一笔好的取舍。
采用顺序应当保持保守:
- 把一条构建路径建模为可复用的
Tasks,parameters、workspaces 和小型 task results 都刻意收窄。[2] - 把这些 tasks 组合成一条
Pipeline,其图结构可以在没有隐藏 shell state 的情况下被理解。[3] - 先手动运行,再通过 Triggers 暴露出来。[4]
- 当 run history 和 logs 需要在 live CRDs 之外有一个持久归宿时,加入 Results。[5]
- 当 artifact provenance 和 signed execution evidence 成为交付契约的一部分时,加入 Chains。[6]
这个顺序可以避免 Tekton 变成 YAML theater。重点不在于在 Kubernetes 里重建一个旧 CI 服务器,而在于明确决定,交付中的哪些部分应当成为 Kubernetes objects,哪些部分应当留在集群之外。只有当这条边界经过有意设计,Tekton 才会兑现收益。
来源
- Tekton 文档,“Concept model”——基本组件、
Task、TaskRun、Pipeline、PipelineRun,以及基于 pod 的步骤执行。 - Tekton Pipelines 文档,“Tasks”——steps、parameters、workspaces、task results、sidecars,以及 result 大小指引。
- Tekton Pipelines 文档,“Pipelines”——pipeline task 组合、依赖、parameters、workspaces 与 pipeline 执行模型。
- Tekton 文档,“Triggers and EventListeners”——
EventListener、Trigger、TriggerBinding、TriggerTemplate与Interceptor的角色。 - Tekton 文档,“Results”——长期结果存储、Records、Results API、watcher、retention agent 与清理动机。
- Tekton 文档,“Supply Chain Security”——Tekton Chains controller 行为、签名、attestations 与存储后端。
- GitHub releases,
tektoncd/pipelinev1.13.0——用于新鲜度检查的当前 release tag 与发布时间戳。 - GitHub API,
tektoncd/pipeline仓库元数据,采样于 2026-06-04——stars、forks、open issues 与 push 时间戳。 - Wikimedia Commons,“Rack with varoius servers.jpg”——本文图片所用的真实数据中心机架照片来源。