ci: Staging部署并行优化,镜像pull+容器启动+健康检查全部并行 #696

Merged
xiaoxia merged 1 commits from ci/deploy-staging-parallel into develop 2026-07-22 08:42:38 +08:00
Owner

优化内容

Staging部署脚本全面并行化,预计部署时间减少40-60%:

  1. 三镜像并行pull:api/worker/web同时拉取,省2/3的pull时间
  2. 三容器并行启动:docker run -d后台并行启动
  3. API+Web健康检查并行等待:同时检测两个服务健康,不用等完一个再等一个

保持不变

  • 数据库迁移保持串行(必须在容器启动前完成)
  • 回滚逻辑保持完整,支持自动回滚
  • 基础设施检查、legacy assets备份等保持原样

文件变更

  • scripts/ci_staging_deploy.sh:重写为并行版本
### 优化内容 Staging部署脚本全面并行化,预计部署时间减少40-60%: 1. **三镜像并行pull**:api/worker/web同时拉取,省2/3的pull时间 2. **三容器并行启动**:docker run -d后台并行启动 3. **API+Web健康检查并行等待**:同时检测两个服务健康,不用等完一个再等一个 ### 保持不变 - 数据库迁移保持串行(必须在容器启动前完成) - 回滚逻辑保持完整,支持自动回滚 - 基础设施检查、legacy assets备份等保持原样 ### 文件变更 - `scripts/ci_staging_deploy.sh`:重写为并行版本
xiaoxia added 1 commit 2026-07-22 08:10:48 +08:00
ci: Staging部署并行优化,镜像pull+容器启动+健康检查全部并行
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 52s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 49s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m0s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m42s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m43s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 5m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m10s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 11m51s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 17s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 37m12s
84a822f6a4

🚀 预览环境已部署

项目 详情
PR号 #696
预览链接 https://pr-696.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #696 | | 预览链接 | [https://pr-696.preview.xiaoxiajianji.com](https://pr-696.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-07-22 08:14:48 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-22 08:14:48 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #696

⚠️ 问题(2个需要修改)

  1. scripts/ci_staging_deploy.sh 第346-376行:并行启动容器逻辑在 set -e 模式下存在严重缺陷。脚本开头设置了 set -eu,当 docker run ... & 命令执行失败(如端口冲突、镜像拉取未完成)时,Shell 会立即退出,导致后续的 wait、错误统计 (START_FAILED) 以及 rollback 函数均不会执行。这会导致部署静默失败,环境处于不一致状态且无法自动回滚。
  2. scripts/ci_staging_deploy.sh 第120-167行:回滚函数 rollback 中同样使用了并行后台运行 docker run ... &。由于继承主脚本的 set -eu 属性,如果某个旧镜像不存在导致回滚命令失败,脚本会立即退出,导致剩余的容器(如 Worker 或 Web)无法执行回滚操作。回滚逻辑应当“尽力而为”,不应因单一组件失败而中断整个恢复流程。

💡 建议(2个可选)

  1. scripts/ci_staging_deploy.sh 第218行wait $PID_API $PID_WORKER $PID_WEB 的返回值仅代表最后一个结束的进程状态。虽然脚本后续通过解析日志和 docker inspect 进行了二次校验,逻辑上可行,但依赖日志文本匹配较为脆弱。建议分别捕获每个 PID 的 wait 返回值以提高健壮性。
  2. scripts/ci_staging_deploy.sh 第1-10行:删除了头部关于环境变量(如 REGISTRY_TOKEN, SKIP_MIGRATION)的详细注释。虽然不影响功能,但降低了脚本的可维护性,建议恢复关键参数的文档说明。

格式检查通过 | 逻辑审查需修改 | 性能优化良好


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:17:11 | 模型:

## 代码审查结果 - PR #696 ### ⚠️ 问题(2个需要修改) 1. **scripts/ci_staging_deploy.sh 第346-376行**:并行启动容器逻辑在 `set -e` 模式下存在严重缺陷。脚本开头设置了 `set -eu`,当 `docker run ... &` 命令执行失败(如端口冲突、镜像拉取未完成)时,Shell 会立即退出,导致后续的 `wait`、错误统计 (`START_FAILED`) 以及 `rollback` 函数均不会执行。这会导致部署静默失败,环境处于不一致状态且无法自动回滚。 2. **scripts/ci_staging_deploy.sh 第120-167行**:回滚函数 `rollback` 中同样使用了并行后台运行 `docker run ... &`。由于继承主脚本的 `set -eu` 属性,如果某个旧镜像不存在导致回滚命令失败,脚本会立即退出,导致剩余的容器(如 Worker 或 Web)无法执行回滚操作。回滚逻辑应当“尽力而为”,不应因单一组件失败而中断整个恢复流程。 ### 💡 建议(2个可选) 1. **scripts/ci_staging_deploy.sh 第218行**:`wait $PID_API $PID_WORKER $PID_WEB` 的返回值仅代表最后一个结束的进程状态。虽然脚本后续通过解析日志和 `docker inspect` 进行了二次校验,逻辑上可行,但依赖日志文本匹配较为脆弱。建议分别捕获每个 PID 的 `wait` 返回值以提高健壮性。 2. **scripts/ci_staging_deploy.sh 第1-10行**:删除了头部关于环境变量(如 `REGISTRY_TOKEN`, `SKIP_MIGRATION`)的详细注释。虽然不影响功能,但降低了脚本的可维护性,建议恢复关键参数的文档说明。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能优化良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:17:11 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit df0e95ee58 into develop 2026-07-22 08:42:38 +08:00
xiaoxia deleted branch ci/deploy-staging-parallel 2026-07-22 08:42:38 +08:00

🗑️ 预览环境已清理

PR #696 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #696 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.