docker负责应用打包与环境一致性,tekton负责kubernetes上声明式调度与任务编排;二者结合实现从代码提交到生产部署的端到端自动化,具备可复用、可观测、可审计特性。

用 Docker 和 Tekton 搭建云原生全自动化持续交付流水线,核心在于:Docker 负责应用打包与环境一致性,Tekton 负责在 Kubernetes 上声明式调度、编排和执行交付任务。两者结合,能实现从代码提交到生产部署的端到端自动化,且每个环节可复用、可观测、可审计。
Docker 是交付的“内容底座”
Docker 把应用及其依赖打包成不可变镜像,这是持续交付的前提。关键点包括:
- 统一构建入口:所有环境(开发/测试/生产)都基于同一份 Dockerfile 构建,避免“本地能跑,线上崩”的问题
-
语义化镜像标签:建议用 Git commit SHA 或语义化版本(如
v1.2.0-$(git rev-parse --short HEAD))作为镜像 tag,确保可追溯 - 多阶段构建减小体积:例如 Go 项目用 builder 阶段编译,再 COPY 二进制到 alpine 基础镜像,最终镜像常可压缩至 15MB 以内
-
安全基础镜像优先:选用 distroless 或官方 slim 镜像(如
python:3.11-slim),减少攻击面
Tekton 是交付的“流程引擎”
Tekton 在 Kubernetes 上以 CRD 方式运行,把交付流程拆解为可组合、可复用的单元:
-
Task 定义单个原子动作:比如
git-clone、buildah-build、docker-push、kubectl-apply;每个 Task 运行在一个 Pod 中,天然隔离 -
Pipeline 编排任务顺序与依赖:支持串行(
runAfter)与并行(无依赖任务同时触发),适合单元测试与镜像构建并行加速 - Workspace 统一传递上下文:用 PVC 或 emptyDir 挂载代码、证书、kubeconfig 等,避免敏感信息硬编码或反复下载
-
PipelineRun 触发一次具体执行:可带参数(如
IMAGE_REPO=registry.example.com/app、GIT_REVISION=main),适配不同分支或环境
典型流水线结构(CI + CD 一体化)
一个生产就绪的流水线通常包含以下阶段,全部用 Tekton YAML 定义:
-
Clone:使用社区
git-cloneClusterTask 拉取代码,指定 branch/tag/commit -
Test:运行
make test或pytest,失败则中断后续;可加超时与资源限制(如limits.memory: "1Gi") -
Build & Push:用
buildah或kaniko构建镜像(规避 Docker-in-Docker 安全风险),推送到 Harbor 或 Docker Hub -
Deploy:更新 Kubernetes Deployment 的
image字段,推荐通过 Kustomize 或 Helm 渲染后 apply,而非直接 patch -
Verify(可选):调用健康检查接口(如
curl -f http://app:8080/healthz),失败自动回滚或告警
集成 GitOps 实现闭环交付
单纯 Tekton 完成部署还不够——它只管“推上去”,不管“是否生效”。建议与 Argo CD 结合:
- Tekton 流水线最后一步,仅更新 Git 仓库中 manifests 目录下的
kustomization.yaml或values.yaml,提交并推送 - Argo CD 监听该 Git 仓库,检测到变更后自动同步到集群,完成声明式终态收敛
- 这样既保留 Tekton 的灵活构建能力,又获得 Argo CD 的发布控制、对比、回滚与可视化能力











