如果一开始就问“Tekton 能取代 Jenkins 吗?”,它很容易被读错。有些场景里答案成立,但这个问题会遮住真正的迁移内容。Tekton 的核心形态更接近一组 Kubernetes 自定义资源,它把构建和交付工作声明为集群原生对象:TaskTaskRunPipelinePipelineRun、事件触发、结果存储,以及供应链签名相关的接口面。[1][2][4][5][6]

截至 2026-06-04T22:32:41Z UTC,通过 GitHub API 看到,tektoncd/pipeline 仓库有 8,981 stars1,925 forks549 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:监听事件,然后使用 TriggersTriggerBindingsTriggerTemplates 和可选的 Interceptors 抽取 payload 字段,并实例化 TaskRunsPipelineRuns。[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 中分离出来,使已完成的 TaskRunPipelineRun objects 可以被清理,同时 run records 和 logs 仍可在其他位置查询。[5] 这一点很重要,因为 Kubernetes etcd 不能承担无限 CI history database 的角色。

Chains 处理的是另一个边界。它的文档描述了一个 controller:观察已完成的 TaskRunsPipelineRuns,为它们创建快照,把数据转换成标准 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 的需求。它会让这些责任更明确。只有团队准备好承担这些责任,这才是一笔好的取舍。

采用顺序应当保持保守:

  1. 把一条构建路径建模为可复用的 Tasks,parameters、workspaces 和小型 task results 都刻意收窄。[2]
  2. 把这些 tasks 组合成一条 Pipeline,其图结构可以在没有隐藏 shell state 的情况下被理解。[3]
  3. 先手动运行,再通过 Triggers 暴露出来。[4]
  4. 当 run history 和 logs 需要在 live CRDs 之外有一个持久归宿时,加入 Results。[5]
  5. 当 artifact provenance 和 signed execution evidence 成为交付契约的一部分时,加入 Chains。[6]

这个顺序可以避免 Tekton 变成 YAML theater。重点不在于在 Kubernetes 里重建一个旧 CI 服务器,而在于明确决定,交付中的哪些部分应当成为 Kubernetes objects,哪些部分应当留在集群之外。只有当这条边界经过有意设计,Tekton 才会兑现收益。

来源

  1. Tekton 文档,“Concept model”——基本组件、TaskTaskRunPipelinePipelineRun,以及基于 pod 的步骤执行。
  2. Tekton Pipelines 文档,“Tasks”——steps、parameters、workspaces、task results、sidecars,以及 result 大小指引。
  3. Tekton Pipelines 文档,“Pipelines”——pipeline task 组合、依赖、parameters、workspaces 与 pipeline 执行模型。
  4. Tekton 文档,“Triggers and EventListeners”——EventListenerTriggerTriggerBindingTriggerTemplateInterceptor 的角色。
  5. Tekton 文档,“Results”——长期结果存储、Records、Results API、watcher、retention agent 与清理动机。
  6. Tekton 文档,“Supply Chain Security”——Tekton Chains controller 行为、签名、attestations 与存储后端。
  7. GitHub releases,tektoncd/pipeline v1.13.0——用于新鲜度检查的当前 release tag 与发布时间戳。
  8. GitHub API,tektoncd/pipeline 仓库元数据,采样于 2026-06-04——stars、forks、open issues 与 push 时间戳。
  9. Wikimedia Commons,“Rack with varoius servers.jpg”——本文图片所用的真实数据中心机架照片来源。