标准答案
- CI 使用固定 Go 版本、只读依赖和可验证的模块下载,记录 commit、版本和构建参数。
- CGO、系统库、架构和静态链接会影响运行制品,不能只在本机测试。
- 升级要验证 API、TLS、性能、内存、race 和依赖漏洞。
- 发布采用灰度或蓝绿,回滚代码时确保数据库、消息和缓存 Schema 仍兼容。
题目解析
Go 二进制通常便于交付,但 CGO、动态库、证书、时区、架构和内核能力仍会影响运行。构建要记录 Go 版本、commit、编译参数、基础镜像和依赖校验。
升级要检查 API、漏洞、性能、内存、race、TLS 和消息/数据库兼容,保留旧制品与配置。灰度期间观察错误、P99、goroutine、GC 和下游连接。
回滚代码时旧二进制可能无法解析新消息或新数据库结构。采用扩展后收缩、兼容 Schema 和向前修复,避免回滚只替换一个文件。
常见误区
- 误区:只复制二进制不复制证书和配置。改正:制品清单包含运行时依赖、配置来源和证书轮换边界。
- 误区:升级依赖后不审计 go.sum。改正:审查模块树、校验和、漏洞和构建产物差异。
- 误区:回滚旧二进制却使用新消息格式。改正:保持新旧版本兼容,或先暂停流量并执行数据/消息恢复。