Tekton - 云原生持续集成与交付(CI/CD)工具
1. 前言
在持续集成与持续交付(CI/CD)领域 Jenkins 是事实上的标准,随着云原生领域技术的发展,微服务架构下的持续集成与持续交付面临新的挑战。Jenkins 开源社区也开启了一个全新的项目 Jenkins X 来应对挑战。它基于 Jenkins 和 Kubernetes 实现,为微服务体系架构下的云原生应用的开发、运行和部署提供了全面的支持。相比于 Jenkins,Jenkins X 复用了 Jenkins 的能力,但更加专注于云原生应用的构建、测试和部署。
Tekton 是一个开源的、供应商中立的框架,用于创建持续集成和交付(CI/CD)系统,由持续交付基金会(CDF) 管理。作为 kubernetes 原生框架,Tekton 是通过为管道、工作流和其他构建块提供行业规范来实现持续交付的现代化。Tekton 允许通过抽象底层实现细节可跨多个云提供商或本地系统构建、测试和部署。
Tekton 和 Jenkins X 都是流行的持续集成/持续交付(CI/CD)工具,Jenkins X 更适用于那些已经熟悉 Jenkins 并希望将其扩展到云原生领域的团队。选择哪个工具取决于具体的项目需求、团队偏好以及团队对云原生技术的支持程度。
2. Tekton 的工作方式
Tekton 的目标是在云原生环境中创建可重用、可组合和声明性的小型构建块。它使用步骤(Step)、任务(Task)、管道(Pipeline)和资源(Resource)来执行此操作,如下图所示。
图片来源于:developers.redhat.com
-
Step 是对输入执行的操作。如果正在构建 Java 应用程序,它可能会运行一些单元测试或验证代码是否遵循现有的编码标准。Tekton 将在提供的容器中执行每个步骤。对于该Java 应用程序,可以运行安装了 JDK 的基础映像。Step 是 Tekton 中最基本的单元。
-
Task 是按顺序执行的步骤列表。Tekton 在 Kubernetes 的 pod 中运行 Task,这允许在设计一系列相关 step 时拥有一个共享环境。例如,可以在任务中挂载一个卷,该卷将在该特定任务的每个步骤中共享。
-
Pipeline 是可以并行或顺序执行的任务的集合。Tekton 为开发人员提供了如何以及何时执行这些任务的很大灵活性。甚至可以指定任务必须满足的条件才能启动下一个任务。
-
Resource 大多数 Pipeline 需要执行任务的输入,也可以产生输出。在 Tekton 中,这些被称为资源。资源可以是许多不同的类型,如 Git存储库、容器映像或 Kubernetes 集群。
3. Tekton 安装
先决条件:
- kubernetes 集群版本 >= v1.28
- kubectl 命令行工具
- 向当前用户授予集群管理员权限 Cluster-admin 。参见:Kubernetes role-based access control (RBAC)
官方 yaml 安装文件中的 image 指向 gcr.io,国内无法访问,需要科学上网。可以使用阿里云提供的镜像文件替代。只是版本略低于官方版本。 参见:阿里云容器计算服务帮助文档-Tekton最佳实践
此安装方式适合作为 Tekton 管道 的快速启动安装指南,不适用于生产用途。生产环境官方建议使用Tekton Operator 来安装、升级和管理 Tekton 项目。
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
# Specific release
# kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/previous/<version_number>/release.yaml
# 当所有组件在 READY 列下显示1/1时,安装完成。如下图。按 Ctrl+C 停止监控
kubectl get pods --namespace tekton-pipelines --watch
安装 Tekton Command Line 工具
测试环境为 Ubuntu 24.04 LTS
curl -LO https://github.com/tektoncd/cli/releases/download/v0.38.1/tektoncd-cli-0.38.1_Linux-64bit.deb
sudo dpkg -i ./tektoncd-cli-0.38.1_Linux-64bit.deb
4. 创建一个测试 Task
sudo cat > hello-world.yaml << EOF
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello
spec:
steps:
- name: echo
image: alpine
script: |
#!/bin/sh
echo "Hello World"
EOF
kubectl apply -f hello-world.yaml
sudo cat > hello-world-run.yaml << EOF
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: hello-task-run
spec:
taskRef:
name: hello
EOF
kubectl apply -f hello-world-run.yaml
# Verify that everything worked correctly:
# The value True under SUCCEEDED confirms that TaskRun completed with no errors.
kubectl get taskrun hello-task-run
# Take a look at the logs:
kubectl logs --selector=tekton.dev/taskRun=hello-task-run
5.接下来
-
Tekton 提供了一个 Web UI,参见官网 Dashboard 安装
-
可以在 Visual Studio Code 中安装 Red Hat 开发的插件 Tekton Pipelines
7.参考
[1] Tekton 官网
[2] 持续交付基金会(CDF)
[3] 阿里云容器计算服务帮助文档-Tekton最佳实践
[4] Tekton Operator
[5] Visual Studio (VS) Code Tekton Pipelines extension by Red Hat