fix: docker buildx build 加 25 分钟超时防止无限挂起 #1420

Merged
auto-approve-bot merged 1 commits from fix/docker-build-timeout into develop 2026-08-18 13:56:01 +08:00
Owner

问题

Run #32849 的 Build Staging API Image 卡了 8+ 小时,docker buildx build 没有超时控制,pip install / apt-get 卡住时无限等待。

修复

  • 给 docker_build_push.sh 中所有 docker buildx build 调用加 timeout 1500s (25min)
  • 超时退出码 124 时输出明确错误信息
  • 25min 留出 5min buffer(job 级 timeout 为 30min)
## 问题 Run #32849 的 Build Staging API Image 卡了 8+ 小时,docker buildx build 没有超时控制,pip install / apt-get 卡住时无限等待。 ## 修复 - 给 docker_build_push.sh 中所有 docker buildx build 调用加 timeout 1500s (25min) - 超时退出码 124 时输出明确错误信息 - 25min 留出 5min buffer(job 级 timeout 为 30min)
xiaoxia added 1 commit 2026-08-18 13:38:06 +08:00
fix: add 25min timeout to docker buildx build to prevent infinite hang
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 / Deploy Staging (Watchtower auto-deploy) (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
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 38s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 1m21s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m37s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m41s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m52s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m48s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m35s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 10m14s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 11m56s
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
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 7m19s
CI/CD Pipeline / CI Gate (pull_request) Successful in 9s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 34s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 1m9s
fcbac56989
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [scripts/ci/docker_build_push.sh: 6] 支持通过环境变量覆盖超时时间

    • 具体内容:当前代码直接赋值 BUILD_TIMEOUT=1500,这会覆盖外部传入的同名环境变量。建议使用默认值赋值语法 : ${BUILD_TIMEOUT:=1500}BUILD_TIMEOUT=${BUILD_TIMEOUT:-1500},以便允许在特殊场景下通过环境变量调整超时时间,而无需修改脚本。
  2. [scripts/ci/docker_build_push.sh: 49, 66] 变量引用建议加双引号

    • 具体内容:虽然 BUILD_TIMEOUTexit_code 在当前逻辑中必定是数字,不存在分词或通配符风险,但遵循 ShellCheck 最佳实践,建议将变量引用改为双引号包裹形式,如 "${BUILD_TIMEOUT}""$exit_code",以增强脚本的健壮性。

良好实践

  • 超时机制引入:针对 docker buildx build 这种可能长时间挂起的操作添加 timeout 命令是很好的防御性编程实践,有效避免 CI 资源浪费。
  • 错误码处理:正确捕获了 timeout 命令特有的退出码 124,并将其作为特定错误处理,避免与构建本身的错误混淆,逻辑清晰。
  • 日志输出:在超时发生时输出最后 20 行构建日志,有助于排查问题。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-18 05:39:29 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[scripts/ci/docker_build_push.sh: 6] 支持通过环境变量覆盖超时时间** - 具体内容:当前代码直接赋值 `BUILD_TIMEOUT=1500`,这会覆盖外部传入的同名环境变量。建议使用默认值赋值语法 `: ${BUILD_TIMEOUT:=1500}` 或 `BUILD_TIMEOUT=${BUILD_TIMEOUT:-1500}`,以便允许在特殊场景下通过环境变量调整超时时间,而无需修改脚本。 2. **[scripts/ci/docker_build_push.sh: 49, 66] 变量引用建议加双引号** - 具体内容:虽然 `BUILD_TIMEOUT` 和 `exit_code` 在当前逻辑中必定是数字,不存在分词或通配符风险,但遵循 ShellCheck 最佳实践,建议将变量引用改为双引号包裹形式,如 `"${BUILD_TIMEOUT}"` 和 `"$exit_code"`,以增强脚本的健壮性。 ### ✅ 良好实践 - **超时机制引入**:针对 `docker buildx build` 这种可能长时间挂起的操作添加 `timeout` 命令是很好的防御性编程实践,有效避免 CI 资源浪费。 - **错误码处理**:正确捕获了 `timeout` 命令特有的退出码 124,并将其作为特定错误处理,避免与构建本身的错误混淆,逻辑清晰。 - **日志输出**:在超时发生时输出最后 20 行构建日志,有助于排查问题。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-18 05:39:29 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-18 13:45:43 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit cd485a6370 into develop 2026-08-18 13:56:01 +08:00
auto-approve-bot deleted branch fix/docker-build-timeout 2026-08-18 13:56:01 +08:00

🗑️ 预览环境已清理

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

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

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