Tekton 如何接入物理机进行构建

1. 为什么需要物理构建机

Kuberntes 对物理机或者虚拟机的管理,实际上是一个典型的 Operator 场景。我们可以定义一个 CRD 用来描述相关字段,通过写 Controller 处理 Pod 与构建机之间的逻辑。也可以写 Tekton 的 Task 封装,本文将使用这种方式。由此也给我带来另一个疑问,Tekton 能否代替部分 Operator 的场景,在后续的文章中我会给出思考。这里仅做原型验证,不会太关注产品化的细节。在 Tekton 中,每个流水线由很多个 Task 构成,Task 可以并行。一个 Task 包含很多个串行的 step 步骤,对应着一个 Pod 包含很多个容器。这里的关键是要将 Pod 与构建机关联起来。我选择的是使用 rsync 同步 Pod 与构建机之间的文件,在 Pod 中使用 sshpass 执行物理机的构建命令。主要分为如下步骤 (以下命令都是在容器中执行):

  • 克隆代码
  • 执行 rsync 将代码同步到构建机
  • 执行 sshpass 在构建机上执行构建命令
  • 执行 rsync 将构建机中的构建产物同步到容器
  • 归档构建产物(示例中, 这一步会被省略,仅验证能拿到构建产物)
  • 一台物理机或虚拟机。用于构建应用
  • 一个 pv, 用于共享 task 之间的文件
  • 一个自定义的 task, 用于将代码同步到构建机,构建完成之后,再同步回来
  • 一个 pipeline, 用于描述流水线,编排 task
  • 一个 pipelinerun, 用于实例化 pipeline, 提供构建时必要的参数
  • 编写 step 流程
  • 写 script
  • 不限于 Tekton, 任意的引擎都可以使用这种方式。
  • 这里仅是作为方案验证,如果落地到产品,还需要考虑缓存、秘钥安全、数据安全、租户隔离等问题。