前面介绍了如何通过jenkins完成构建,在使用jenkins过程中,也有一些不足,例如基于脚本的job配置复用率不足,另外代码调试困难。所以如何提高job的配置脚本的复用和让流水线作业的配置更好的适应云原生场景的需求变得越来越迫切。而基于声明式API的流水线-Tekton能有效解决上面的两个问题。
自定义:Tekton对象高度自定义,可扩展性极强,平台工程师可预定义可重用模块,开发人员可在其他项目中直接引用。Tekton的对象可充用性强,组件只需定义一次,组织内任何人就可以进行复用。
可扩展:Tekton组件目录(Tekton Catalog)是一个社区驱动的Tekton组件的存储仓库,任何用户可从社区获取成熟的组件,并在此基础上构建复杂的流水线。
标准化:Tekton作为Kubernetes集群的扩展安装和运行,是公认的Kubernetes资源模型,Tekton作业以Kubernetes容器形态执行。
规模化支持:只需增加Kubernetes节点,即可增加作业处理能力。
为了理解和使用Tekton,先来看看Tekton涉及的组件以及组件的作用。
Step:step是CI/CD工作流中的一种操作,比如为Python web应用程序运行一些单元测试,或者编译Java程序。Tekton使用您提供的容器镜像执行每个步骤。例如,你可以使用官方的Go Image来编译一个Go程序,就像你在本地工作站上编译一样(Go build)。
Task:Task是按顺序排列的步骤的集合。Tekton以Kubernetes pod的形式运行一个任务,每一步都成为pod中的一个运行容器。这种设计允许您为一系列相关step设置共享环境;例如,您可以在Task中挂载Kubernetes volume,该volume在Task的每个Step中都可以访问。
Pipeline: Pipeline是按顺序的Task集合。Tekton收集所有任务,将它们连接到一个有acyclic graph(DAG)中,并按顺序执行。换句话说,它创建了许多Kubernetes pod,并确保每个pod按预期成功运行。Tekton授予开发人员对过程的完全控制:可以设置任务完成的扇入/扇出场景,要求Tekton在存在不可靠的测试时自动重试,或者指定任务在继续之前必须满足的条件。
PipelineRun: PipelineRun是Pipeline的特定执行。例如,您可以要求Tekton每天运行两次CI/CD工作流,每次执行将成为Kubernetes集群中可跟踪的pipelineRun资源。您可以使用pipelineRuns查看CI/CD工作流的状态,包括每个任务执行的细节。
TaskRun: taskRun是任务的特定执行。当你选择在Pipeline外运行任务时,TaskRuns也是可用的,通过它你可以查看任务中每个步骤执行的细节。
Tekton Trigger: Tekton Triggers是一个Tekton组件,它允许你从各种来源的事件中检测和提取信息,并基于这些信息确定和执行TaskRuns和PipelineRuns。Tekton触发器还可以将从事件中提取的信息直接传递给TaskRuns和PipelineRuns。安装Tekton触发器在Kubernetes集群作为Tekton Pipeline的扩展。要理解Trigger如何工作,又需要理解下面的术语概念。
EventListener - 监听Kubernetes集群上指定端口的事件。指定一个或多个触发器。
Trigger - 指定当EventListener检测到事件时会发生什么。一个触发器指定一个TriggerTemplate、一个TriggerBinding和一个Interceptor(可选)。
TriggerTemplate - 指定资源的蓝图,例如TaskRun或PipelineRun,当你的EventListener检测到一个事件时,你想实例化和/或执行它。它公开了可以在资源模板中的任何位置使用的参数。
TriggerBinding - 指定希望提取的数据的字段,以及用提取的值填充相应TriggerTemplate中的字段。然后可以使用TriggerTemplate中填充的字段来填充相关的TaskRun或PipelineRun中的字段。
ClusterTriggerBinding - 一个适用于集群的TriggerBinding版本,特别适合在集群中重用。
Interceptor - 在TriggerBinding之前运行的特定平台的“万能”事件处理器,使您能够执行有效负载过滤、验证、转换、定义和测试触发条件,以及其他有用的处理。event data通过Inercept