kdo 源码持续交付流程图
如下图所示,要实现持续交付,通常需要以下流程。
-
用户提交代码到源码仓库,此时在开发环境中构建和进行自动化测试流程,测试完成后,如果不通过则反馈到开发人员进行调整,从而保证代码质量。
-
当开发人员功能基本开发完成后,此时代码需要从 dev 分支合并到 testing 分支,并部署测试环境用于测试人员进行测试。这样开发者还可以基于 dev 分支继续开发,而测试人员则进行完整功能测试。如果功能测试失败,则继续反馈给开发人员。
-
当某个版本测试通过以后,我们就可以认为已经有了高质量可交付的版本。接下来需要人工审核,将代码从 testing 分支合并到 master 分支,用于生产环境的部署上线。

分支映射与写回链路
代码仓库的三个分支分别映射到开发、测试、生产环境,生产发布由构建写回的提交触发,而不是由仓库 Webhook 直接部署。
flowchart TD
A[开发者向 dev 分支提交代码] --> B[dev 流水线构建并运行自动化测试]
B --> C{测试是否通过}
C -->|否| D[修复后重新提交 dev]
D --> A
C -->|是| E[合并 dev 到 test 分支]
E --> F[test 环境批量构建全部组件]
F --> G[测试人员完整功能测试]
G --> H{测试是否通过}
H -->|否| D
H -->|是| I[人工审核并合并 test 到 master]
I --> J[master 流水线构建]
J --> K[gitops-writeback 写入部署清单]
K --> L[推送 kubedo-writeback 提交]
L --> M[平台按写回提交创建部署流水线]
M --> N[kubectl apply 完成生产发布]
操作步骤
准备工作
-
拥有一套 kdo 集群,参考快速安装,多个项目(用于模拟开发环境、测试环境、生产环境)。
-
项目源代码拥有三个分支,dev、test、master。
-
创建项目时,选择
开发环境、测试环境、生产环境三个环境。 -
创建应用时,在
自动分支流水线选项中把源代码分支和环境进行对应。
开发环境
- 在你的 Git 仓库配置完成该步骤后,可以通过提交代码触发开发环境的自动构建以及自动化测试,再根据构建结果完成代码调整。
部署测试环境
在开发人员功能基本开发完成,完成自测以后,此时需要将代码交付给测试人员部署测试环境,并进行完整的功能测试。
-
将代码从 dev 分支合并到 test 分支。
-
测试人员在测试环境验证完成后,将问题反馈到开发人员,开发人员完成修复和代码合并后,测试人员只需在测试环境的
应用页面->列表,选择全部组件进行批量构建即可快速更新测试环境。
交付生产环境
-
在测试完全通过以后,需要将代码从 test 分支合并到 master 分支。此时,由具有上线权限的用户完成审核,并合并代码。
-
代码合并到 master 分支后,通过手动或自动运行流水线,实现应用的发布
-
如果生产出现问题。仍然需要开发者在 dev 分支上完成自测,测试团队在 test 分支上测试通过,最后由具有生产环境上线的用户来完成代码合并和上线。
构建写回与自动部署
kdo 的发布分成两条链路:构建负责产出镜像并把版本写回代码仓库,部署由平台在构建成功后自动创建。应用仓库里不再需要维护部署流水线文件。
工作流程
- 构建流水线执行
gitops-writeback任务,把新镜像版本写入kubernetes/deploy-<环境>-<分支>.yaml,并以[kubedo-writeback]开头的提交信息推送回仓库; - 构建成功后,平台读取写回结果(
changed=true且拿到提交 sha),自动创建部署流水线; - 部署流水线按写回提交拉取仓库、校验清单,然后执行
kubectl apply完成发布。
部署由平台在集群内直接创建,不依赖 Git 服务器的 webhook。源代码仓库访问不到平台的情况下,构建完成后依然可以自动部署。
| 项目 | 说明 |
|---|---|
| 部署流水线定义 | 集群内 kubedo 命名空间的 ConfigMap pipelinerun-gitops-deploy,不在应用仓库中 |
| 触发条件 | 构建成功,且 gitops-writeback 任务 changed=true |
| 运行名称 | <应用>-<环境>-<分支>-deploy-<写回提交前 8 位> |
| 部署版本 | 写回提交中的清单,与构建产物严格对应 |
| 幂等性 | 同一提交重复触发不会重复创建运行 |
| 历史保留 | 每个分支保留最近 3 次部署运行 |
手动部署与回滚
需要重新发布(例如集群被手工改动、或想回到某个历史版本)时,可以从控制台的发布历史中选择目标版本,平台会自动提交清单变更并触发部署。
也可以通过接口手动触发当前分支的部署:
curl -X POST "http://pipelines-as-code-controller.pipelines-as-code.svc:8080/manual?cluster=<集群>&namespace=<项目>&repository=<应用>&branch=<分支>&appEnv=<环境>&deploy=yes" \
-H "X-Webhook-Secret: ${WEBHOOK_SECRET}"
deploy=yes 只创建部署运行、不触发构建;如需部署指定提交,可追加 revision=<提交 sha>。
注意事项
- 清单中的镜像必须带版本 tag,否则部署会被拒绝并提示先运行构建;
- 部署只应用清单,不会修改镜像 tag,镜像版本由构建写回决定;
- 构建成功但没有产生部署时,按
问题排查中的“构建成功但没有创建部署运行”逐项检查。