8.4 发布与部署速查
类型:参考页,不要求顺序阅读
前置知识:全链路和 CI/CD
完成标志:能快速定位制品、版本、部署和回滚证据
全链路速查
| 阶段 | 典型动作 | 必留证据 |
|---|---|---|
| 集成 | checkout、compile、test、verify | commit SHA、测试结果 |
| 打包 | Maven package / verify | JAR、哈希、构建日志 |
| 制镜像 | docker build | image ID、基础镜像、SBOM |
| 发布 | push artifact/image | registry digest、来源证明 |
| 部署 | 更新目标声明 | 环境、时间、操作者、旧/新 digest |
| 放流 | health、smoke、逐步流量 | 指标、日志、错误预算 |
| 回滚 | 恢复已知良好版本 | 触发条件、目标 digest、验证结果 |
本地检查
bash
mvn --batch-mode verify
sha256sum target/*.jar
docker image inspect name:tag
docker container inspect name
docker logs --tail 100 name这些是针对已有项目和容器的命令片段,name:tag、name 必须替换。通配符命中多个 JAR 时要明确选择主制品。macOS 哈希命令可用 shasum -a 256。
Registry 模板
bash
printf '%s' "$REGISTRY_TOKEN" | docker login REGISTRY \
--username "$REGISTRY_USER" --password-stdin
docker tag local:candidate registry.example.com/owner/image:sha-COMMIT
docker push registry.example.com/owner/image:sha-COMMIT
docker logout REGISTRY这里的 REGISTRY、用户变量、提交标识和 registry.example.com/owner/image 都是占位内容,登录主机须与推送目标一致,镜像仓库路径使用小写。仅在受控终端或 CI 中使用注入变量。不要把真实 token 写进仓库、命令示例或 shell 历史。部署记录使用 push 返回的 digest,而不是只记录可移动标签。
发布前检查
- [ ] 测试、静态检查和漏洞策略通过;
- [ ] 候选制品只构建一次,哈希与 digest 已记录;
- [ ] 配置和秘密属于正确环境;
- [ ] 数据库迁移兼容回滚;
- [ ] 健康、smoke、指标和日志查询已准备;
- [ ] 已知良好版本与回滚权限可用;
- [ ] 并发部署和人工门禁策略明确。
常见错误
| 错误 | 先查 |
|---|---|
Address already in use | 主机监听与容器端口发布 |
no main manifest attribute | JAR manifest、主类、repackage 配置 |
| registry denied | 仓库名、登录身份、token scope、包访问关系 |
| 部署后仍旧版 | 实际 digest、容器 image ID、代理与浏览器缓存 |
| 回滚后仍失败 | 数据库/配置兼容性、外部依赖、缓存和流量路由 |