导语:
近期多起供应链事件再次提醒:Python 项目的风险更多来自依赖漂移、包投毒、构建不可重现、签名未验证。本文给出流水线方案:锁文件、重现构建、签名校验与门禁,并附检查表。
1. 锁文件策略
- 统一入口:
pyproject.toml+ pip-tools/poetry/uv 生成锁文件,记录完整依赖与哈希。 - CI 校验:依赖变更未更新锁文件 → 直接失败;禁用 “latest/无上限”。
- 升级节奏:设“依赖升级窗口”,机器人提 PR,集中审阅。
- 私有镜像/代理:公网包需进入批准列表并记录来源。
2. 重现构建
- 固定基础镜像与 Python 版本;构建命令统一(
make build/task build)。 - 产物:wheel/sdist + 构建元数据(commit、锁文件哈希、构建命令)。
- 环境一致:禁止生产临时
pip install;运行时仅用制品仓库。 - SBOM:生成 CycloneDX/SPDX,随制品存档。
3. 签名与校验
- 构建后对 wheel/镜像签名(KMS 管理密钥)。
- 部署侧强制校验签名与哈希,失败即阻断。
- 签名/哈希写入发布记录(证据包),便于审计。
4. CI/CD 门禁示例
- CI:lint+格式化+类型检查、单测+覆盖率、依赖/锁文件校验、SBOM 生成。
- CD:取制品+签名做安装演练;灰度 1%→10%→全量,定义错误率/时延停止条件;回滚保留上一版制品与签名。
5. 运行时与成本护栏
- 定期
pip check与依赖校验,防止镜像腐烂。 - 依赖差分报告(新增/升级/降级)随 PR 提供,便于风险审阅。
- 高风险依赖启用强签名校验或替换方案,并在看板标记。
6. Evidence Pack 模板
- 变更单/PR,锁文件版本/哈希,构建环境与命令
- 制品哈希/签名,SBOM 摘要
- 测试/覆盖率、契约测试结果
- 灰度/回滚记录与验证口径
7. 上线前核查
- 锁文件/依赖差分审查通过,CI 绿。
- 私有镜像/代理可用,批准列表更新;SBOM 生成无误。
- 签名校验在部署侧验证通过;安装演练通过。
- 灰度与停止条件配置完成,回滚流程演练过。
结语:
把锁文件、重现构建、签名校验变成流水线默认项,Python 交付才能在高频迭代中保持可信、可控。
8. 复盘模板
- 证据包:锁文件版本、制品哈希/签名、SBOM 摘要、测试结果、灰度/回滚记录、验证口径。
- 行动项:依赖风险整改、镜像刷新计划、告警优化,标记负责人与截止时间。
- 看板:依赖变更频率、高风险依赖占比、签名校验失败率、安装演练失败率。
9. 快速核查
- 锁文件/依赖差分审查通过,CI 绿。
- 私有镜像/代理可用,批准列表与 SBOM 更新。
- 签名校验在部署侧验证,灰度与停止条件配置完毕,回滚演练过。
10. 运营看板
- 展示依赖变更频率、高风险依赖占比、签名校验失败率、安装演练失败率。
- 异常告警:签名校验失败/下载哈希异常/临时 pip 安装立即告警并生成工单。
- 镜像刷新计划:定期刷新基础镜像,防止依赖腐烂。