第四十三章 CI/CD 与自动化运维
篇别:第十一篇 部署与运维
本章学习目标
- 搭建 CI 流水线:依赖安装、lint、Odoo 测试、制品。
- 使用
neutralize(数据库中性化) 准备 安全的 staging / 沙箱。 - 用
cloc等工具做 代码量统计 与 许可证/外包评估 辅助。 - 讨论 蓝绿发布、长事务、密钥管理 与 Odoo 兼容性。
导读:CI/CD 让「可重复」成为默认
手工部署 易漏步骤、环境漂移。CI 把 同一套命令 在每次 MR 上跑通;CD 把 验证过的制品 推到 预发/生产。Odoo 的特殊性在于 长事务、模块升级、数据库迁移——流水线须 显式区分 「仅代码发布」 与 「-u 迁移」。
43.1 CI/CD 流水线
43.1.1 知识要点
- 阶段:lint → 单元/模块测试 → 构建镜像/制品 → 部署预发 → 人工门禁 → 生产。
- Odoo 测试:
odoo-bin -i module --test-enable --stop-after-init或--test-tags;数据库 用 临时 PG 容器。 - 缓存:pip、apt、node(若有前端构建)层缓存 提速。
- 并行:lint 与 test 分 job;大模块 矩阵 按 Odoo 版本 拆分。
- 失败:artifact 上传 日志、screenshot;主分支保护 禁止强推。
43.1.2 案例
.github/workflows/odoo-ci.yml 思路
# 伪代码结构
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install ruff && ruff check custom_addons/
test:
services:
postgres: { image: postgres:16, env: POSTGRES_PASSWORD: odoo }
steps:
- run: pip install -r requirements.txt
- run: ./odoo-bin -d testdb -i my_module --test-enable --stop-after-init
43.1.3 截图占位

43.1.4 本节练习
- 实操:为仓库加 最小 lint job(ruff 或 pylint)。
- 简答:为何 CI 数据库 宜 每次空库或 disposable?
参考答案提示:2. 避免迁移残留 导致 绿假;可重复。
43.2 数据库中性化(新增)
43.2.1 知识要点
neutralize(CLI / 官方工具):清除或改写 外发通道——邮件网关、支付、短信、云密钥、Webhook URL 等(以命令文档为准)。- 用途:生产库拷贝到 staging 前 必跑;外包交付验收 演示库 脱敏。
- 局限:业务表中的 PII 可能 仍需自定义 SQL/脚本 匿名化。
- 验证:中性化后 试发邮件 应 失败或进黑洞;支付 沙箱 key 替换。
43.2.2 案例
# 示意:以 Odoo 版本文档为准
# odoo-bin neutralize -c odoo.conf -d staging_copy
43.2.3 截图占位

43.2.4 本节练习
- 简答:中性化后仍须手工检查的三项数据?
- 判断:neutralize 可 100% 保证 无 PII。( )
参考答案提示:1. 附件、chatter 内电话、自定义 JSON 字段、BI 导出链接。2. 错。
43.3 代码行数统计(新增)
43.3.1 知识要点
cloc:按语言 统计;排除node_modules、.git。- 用途:外包结算、许可证审计(LGPL/企业混合)、技术债基线。
- 解读:XML 暴涨 可能 视图碎片化;Python 少而 XML 多 或 偏配置型模块。
43.3.2 案例
cloc addons/my_module --by-file --exclude-dir=static/lib
43.3.3 截图占位

43.3.4 本节练习
- 实操:统计 自定义模块 Python / XML / JS 行数比。
- 简答:cloc 高是否等于 复杂度高?
参考答案提示:2. 否;生成代码、大 XML 数据 会 虚高。
本章综合练习
- 发布:蓝绿发布 与 Odoo 长事务(报表、导入)兼容性 简析。
- 密钥:CI 中 deploy key 与 GitHub/GitLab secret 分工。
- 综合:设计 「周五发布」检查表(备份、-u 顺序、回滚、neutralize 至少 4 项)。
- 实操:为 测试 job 增加 测试失败时上传
odoo.log片段 的步骤(口述 YAML 要点)。
本章对应白皮书目录:第四十三章 CI/CD 与自动化运维。