第四十三章 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 CI Pipeline 绿色通过

43.1.4 本节练习

  1. 实操:为仓库加 最小 lint jobruff 或 pylint)。
  2. 简答:为何 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 neutralize 命令输出

43.2.4 本节练习

  1. 简答中性化后仍须手工检查的三项数据
  2. 判断neutralize100% 保证 无 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 cloc 汇总表

43.3.4 本节练习

  1. 实操:统计 自定义模块 Python / XML / JS 行数比。
  2. 简答cloc 高是否等于 复杂度高

参考答案提示:2. 否;生成代码、大 XML 数据虚高


本章综合练习

  1. 发布蓝绿发布Odoo 长事务报表、导入兼容性 简析。
  2. 密钥CI 中 deploy key 与 GitHub/GitLab secret 分工。
  3. 综合:设计 「周五发布」检查表备份、-u 顺序、回滚、neutralize 至少 4 项)。
  4. 实操:为 测试 job 增加 测试失败时上传 odoo.log 片段 的步骤(口述 YAML 要点)。

本章对应白皮书目录:第四十三章 CI/CD 与自动化运维。