Tekton 是一个 Kubernetes 原生的开源框架,用于创建持续集成和持续交付 (CI/CD) 系统。它还通过抽象化底层实现细节,帮助在多个云提供商或本地系统上进行端到端(构建、测试、部署)应用程序开发。
Tekton 简介
Tekton 最初被称为 Knative Build,后来被重组为独立的开源项目,拥有自己的 治理组织 ,现在是 Linux 基金会 的一个项目。Tekton 提供集群内部的容器镜像构建和部署工作流程——换句话说,它是一个持续集成 (CI) 和持续交付 (CD) 服务。它由 Tekton Pipelines 和几个支持组件组成,例如 Tekton CLI、Triggers 和 Catalog。
Tekton 是一个 Kubernetes 原生应用程序。它作为 Kubernetes 集群上的扩展安装和运行,并包含一组 Kubernetes 自定义资源,这些资源定义了你可以创建和重用于你的流水线的构建块。由于它是一种 K-native 技术,Tekton 非常容易扩展。当你需要增加工作负载时,你只需向集群添加节点即可。由于其可扩展的设计以及社区贡献组件的存储库,它也很容易定制。
Tekton 非常适合需要 CI/CD 系统来完成工作的开发人员,以及为其组织中的开发人员构建 CI/CD 系统的平台工程师。
Tekton 组件
构建 CI/CD 流水线是一项影响深远的工作,因此 Tekton 为每一步都提供了工具。以下是 Tekton 提供的主要组件
- Pipeline: Pipeline 定义了一组 Kubernetes 自定义资源 ,这些资源充当你用来组装 CI/CD 流水线的构建块。
- Triggers: Triggers 是一种 Kubernetes 自定义资源 ,允许你基于从事件负载中提取的信息创建流水线。例如,你可以每次在 Git 仓库中打开合并请求时触发流水线的实例化和执行。
- CLI: CLI 提供了一个名为
tkn
的命令行界面,允许你从终端与 Tekton 交互。 - Dashboard: Dashboard 是 Tekton 流水线的基于 Web 的图形界面,显示有关流水线执行的信息。
- Catalog: Catalog 是一个高质量的、社区贡献的 Tekton 构建块(任务、流水线等)的存储库,随时可在你自己的流水线中使用。
- Hub: Hub 是一个基于 Web 的图形界面,用于访问 Tekton catalog。
- Operator: Operator 是一种 Kubernetes Operator 模式 ,允许你在 Kubernetes 集群上安装、更新、升级和删除 Tekton 项目。
- Chains: Chains 是一个 Kubernetes 自定义资源定义 (CRD) 控制器,允许你在 Tekton 中管理你的供应链安全。它目前仍在开发中。
- Results: Results 旨在帮助用户逻辑地分组 CI/CD 工作负载历史记录,并将长期结果存储与流水线控制器分离。
Tekton 术语

来源: Tekton 文档
- Step: Step 是 CI/CD 工作流程中最基本的实体,例如为 Python Web 应用程序运行一些单元测试或编译 Java 程序。Tekton 使用提供的容器镜像执行每个步骤。
- Task: Task 是特定顺序的步骤集合。Tekton 以 Kubernetes pod 的形式运行任务,其中每个步骤都成为 pod 中运行的容器。
- Pipelines: Pipeline 是特定顺序的任务集合。Tekton 收集所有任务,将它们连接成有向无环图 (DAG),并按顺序执行该图。换句话说,它创建多个 Kubernetes pod,并确保每个 pod 按照预期成功完成运行。
(来源: Tekton 文档)
- PipelineRun: PipelineRun,顾名思义,是流水线的特定执行。
- TaskRun: TaskRun 是任务的特定执行。当你选择在流水线之外运行任务时,TaskRun 也可用,你可以使用它来查看任务中每个步骤执行的详细信息。
创建你自己的 CI/CD 流水线
开始使用 Tekton 最简单的方法是编写你自己的简单流水线。如果你每天都使用 Kubernetes,你可能对 YAML 很熟悉,而这正是 Tekton 流水线的定义方式。这是一个克隆代码仓库的简单流水线示例。
首先,创建一个名为 task.yaml
l 的文件,并在你喜欢的文本编辑器中打开它。此文件定义你要执行的步骤。在本例中,它是克隆仓库,所以我将步骤命名为 clone。该文件设置了一些环境变量,然后提供了一个简单的 shell 脚本来执行克隆。
接下来是任务。你可以将步骤视为由任务调用的函数,而任务设置步骤所需的参数和工作区。
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
spec:
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
params:
- name: url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
steps:
- name: clone
image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
env:
- name: PARAM_URL
value: $(params.url)
- name: PARAM_REVISION
value: $(params.revision)
- name: WORKSPACE_OUTPUT_PATH
value: $(workspaces.output.path)
script: |
#!/usr/bin/env sh
set -eu
CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"
/ko-app/git-init \
-url="${PARAM_URL}" \
-revision="${PARAM_REVISION}" \
-path="${CHECKOUT_DIR}"
cd "${CHECKOUT_DIR}"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
# Verify clone is success by reading readme file.
cat ${CHECKOUT_DIR}/README.md
创建第二个名为 pipeline.yaml
的文件,并在你喜欢的文本编辑器中打开它。此文件通过设置重要的参数(例如可以运行和处理任务的工作区)来定义流水线。
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: cat-branch-readme
spec:
params:
- name: repo-url
type: string
description: The git repository URL to clone from.
- name: branch-name
type: string
description: The git branch to clone.
workspaces:
- name: shared-data
description: |
This workspace will receive the cloned git repo and be passed
to the next Task for the repo's README.md file to be read.
tasks:
- name: fetch-repo
taskRef:
name: git-clone
workspaces:
- name: output
workspace: shared-data
params:
- name: url
value: $(params.repo-url)
- name: revision
value: $(params.branch-name)
最后,创建一个名为 pipelinerun.yaml
的文件,并在你喜欢的文本编辑器中打开它。此文件实际运行流水线。它调用流水线中定义的参数(这些参数又调用任务文件定义的任务)。
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: git-clone-checking-out-a-branch
spec:
pipelineRef:
name: cat-branch-readme
workspaces:
- name: shared-data
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
params:
- name: repo-url
value: https://github.com/tektoncd/pipeline.git
- name: branch-name
value: release-v0.12.x
将你的工作结构化为单独文件的优点是 git-clone
任务可以重用于多个流水线。
例如,假设你想为流水线项目进行端到端测试。你可以使用 git-clone
任务来确保你拥有需要测试的最新代码副本。
总结
只要你熟悉 Kubernetes,开始使用 Tekton 就和采用任何其他 K-native 应用程序一样容易。它有很多工具可以帮助你创建流水线并与你的流水线交互。如果你热爱自动化,请尝试 Tekton!
评论已关闭。