开源 CI/CD 构建框架 TekTon 的深入剖析

Tekton 是一个灵活的 Kubernetes 原生 CI/CD 框架,通过 Task 和 Pipeline 实现复杂的 CI/CD 流水线。它利用 Kubernetes 的 Controller 机制,通过 PipelineRun 和 TaskRun 控制 workflow。虽然 Tekton 对 DAG 的支持有限,但其 PipelineResource 支持 Task 间的数据交换。文章介绍了 Tekton 的核心概念和实践,如使用 Tekton 部署 Spring Cloud 应用到 SAE 平台。
摘要由CSDN通过智能技术生成

简介


Tekton 是一个功能强大且灵活的 Kubernetes 原生 CI/CD 构建框架,用于创建持续集成和交付(CI/CD)系统。 关于 Tekton ,网上可以搜到很多很多介绍文档,本文主要阐述我对 Tekton 的实现原理和背后的技术逻辑的一点理解。

Tekton 定义了 Task、TaskRun、Pipeline、PipelineRun、PipelineResource 五类核心对象,通过对 Task 和 Pipeline 的抽象,我们可以定义出任意组合的 pipeline 模板来完成各种各样的 CI/CD 任务,再通过 TaskRun、PipelineRun和PipelineResource 可以将这些模板套用到各个实际的项目中。

实现原理


高度抽象的结构化设计使得 Tekton 具有非常灵活的特性,那么 Tekton 是如何实现 workflow 的流转的呢?

Tekton 利用 Kubernetes 的 List-Watch 机制,在启动时初始化了 2 个 Controller、PipelineRunController 和 TaskRunController 。

PipelineRunController 监听 PipelineRun 对象的变化。在它的 reconcile 逻辑中,将pipeline 中所有的 Task 构建为一张有向无环图(DAG),通过遍历 DAG 找到当前可被调度的 Task 节点创建对应的 TaskRun 对象。

TaskRunController 监听 TaskRun 对象的变化。在它的 reconcile 逻辑中将 TaskRun 和对应 Task 转化为可执行的 Pod ,由 kubernetes 调度执行。利用 Kubernetes 的 OwnerReference 机制, PipelineRun Own TaskRun、TaskRun Own Pod、Pod 状态变更时,触发 TaskRun 的 reconcile 逻辑, TaskRun 状态变更时触发 PipelineRun 的 reconcile 逻辑。

DAG 支持

Tekton 对 DAG 的支持相对比较简单。在 Tekton 中一个 Pipeline 就是一张 DAG ,Pipeline 中的多个Task可是DAG中的节点。Task 默认并发执行,可以通过 RunAfter 和 From 关键字控制执行顺序。

示例:

- name: lint-repo  taskRef:    name: pylint  resources:    inputs:      - name: workspace        resource: my-repo- name: test-app  taskRef:    name: make-test  resources:    inputs:      - name: workspace        resource: my-repo- name: build-app  taskRef:    name: kaniko-build-app  runAfter:    - test-app  resources:    inputs:      - name: workspace        resource: my-repo    outputs:      - name: image        resource: my-app-image- name: build-frontend  taskRef:    name: kaniko-build-frontend  runAfter:    - test-app  resources:    inputs:      - name: workspace        resource: my-repo    outputs:      - name: image        resource: my-frontend-image- name: deploy-all  taskRef:    name: deploy-kubectl  resources:    inputs:      - name: my-app-image        resource: my-app-image        from:          - build-app      - name: my-frontend-image        resource: my-frontend-image        f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值