基于华为云 CCE 与 CodeArts 的云原生持续交付实践

举报
yd_295232380 发表于 2026/10/24 21:20:19 2026/10/24
【摘要】 一、背景团队早期采用手工打包、scp 上传的方式发布服务,一次发布要 40 分钟,回滚靠人工备份,故障恢复时间不可控。为了把发布变成可重复、可审计的动作,我们基于华为云 CodeArts 与 CCE 搭建了一条云原生持续交付流水线,把代码提交到生产发布的全过程收敛为一次流水线执行。二、整体链路流水线由五段组成:CodeArts Repo 托管代码并做 MR 评审;CodeArts Build...

一、背景
团队早期采用手工打包、scp 上传的方式发布服务,一次发布要 40 分钟,回滚靠人工备份,故障恢复时间不可控。为了把发布变成可重复、可审计的动作,我们基于华为云 CodeArts 与 CCE 搭建了一条云原生持续交付流水线,把代码提交到生产发布的全过程收敛为一次流水线执行。

二、整体链路
流水线由五段组成:CodeArts Repo 托管代码并做 MR 评审;CodeArts Build 执行多阶段构建,产出镜像并推送到 SWR 镜像仓库;CodeArts Deploy 通过 Helm 将新版本发布到 CCE 集群;CCE 负责滚动更新与健康检查;最后通过 AOM 与 APM 采集指标和调用链,异常时由流水线触发回滚。整条链路的编排放在代码仓库的 .codearts/pipeline.yaml 中,与业务代码同仓管理,避免流水线配置漂移。

三、关键实现细节
1. 构建阶段使用 Docker 多阶段构建:builder 阶段安装依赖并编译,runtime 阶段只保留可执行文件与证书,镜像从 1.2GB 降到 180MB,拉取时间从 90 秒降到 12 秒。
2. 镜像 tag 使用 git commit short sha,禁止 latest,保证任何一次发布都能精确回溯到代码版本。
3. Helm values 按环境拆分(dev/staging/prod),流水线通过 --set image.tag 注入版本,其余配置全部走 values 文件,减少手写参数。
4. CCE 工作负载配置 readinessProbe 与 livenessProbe,滚动更新设置 maxSurge=1、maxUnavailable=0,确保发布期间至少保留全部旧副本,流量不中断。
5. 发布后流水线轮询 Deployment 状态,超过 5 分钟未 Ready 自动执行 helm rollback,并输出上一次成功的 revision。

四、可观测性与回滚
应用统一暴露 /healthz 与 Prometheus 指标,AOM 采集容器 CPU、内存、重启次数,APM 采集接口成功率与 P99 时延。流水线在发布后 10 分钟内对比新旧版本的错误率,超过阈值即告警并回滚。实测一次因数据库连接池配置错误导致的发布,在 3 分钟内完成回滚,用户侧无感知。

五、踩坑记录
1. 首次接入时镜像推送 401,原因是流水线使用的临时 AK/SK 没有 SWR 权限,改为在 CodeArts 中配置服务连接并只授予 SWR 读写权限后解决。
2. Helm 升级时 ConfigMap 未变更导致 Pod 未重启,最终通过 checksum/config 注解把配置哈希写入 Pod template,配置变更即可触发滚动更新。
3. 流水线并发发布同一环境会互相覆盖,后来在 Deploy 阶段加了环境级互斥锁,同一环境同一时刻只允许一个发布任务。

六、总结
这套方案把发布从人肉操作变成流水线执行,平均发布耗时从 40 分钟降到 8 分钟,回滚从找备份变成一条命令。云原生的价值不只是容器化,而是把构建、发布、观测、回滚都变成可复现的工程能力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。