ci(ci-stability): 为pip install和npm ci添加重试机制 (#619) #627

Merged
auto-approve-bot merged 2 commits from feature/ci-pip-npm-retry into develop 2026-07-20 10:56:02 +08:00
Owner

CI稳定性增强:pip install + npm ci 重试机制 (#619)

背景

#619 CI稳定性全面根治方案中,pip install / yarn install重试是计划内项。integration tests已加,但unit tests和前端npm ci还裸跑,网络抖动时容易挂。

修改内容

1. Unit Tests pip install 重试 (scripts/ci/run_unit_tests.sh)

  • 3个requirements文件各加3次循环重试
  • 失败后sleep 5秒再试
  • 第3次失败才exit,和integration tests保持一致风格

2. 前端 npm ci 重试 (scripts/ci/step_frontend_install.sh)

  • npm ci 加3次循环重试
  • 失败后sleep 5秒再试
  • 第3次失败才exit

预期效果

  • 网络偶发抖动导致的pip/npm安装失败自动恢复,不用人工重跑
  • CI成功率进一步提升
# CI稳定性增强:pip install + npm ci 重试机制 (#619) ## 背景 #619 CI稳定性全面根治方案中,pip install / yarn install重试是计划内项。integration tests已加,但unit tests和前端npm ci还裸跑,网络抖动时容易挂。 ## 修改内容 ### 1. Unit Tests pip install 重试 (scripts/ci/run_unit_tests.sh) - 3个requirements文件各加3次循环重试 - 失败后sleep 5秒再试 - 第3次失败才exit,和integration tests保持一致风格 ### 2. 前端 npm ci 重试 (scripts/ci/step_frontend_install.sh) - npm ci 加3次循环重试 - 失败后sleep 5秒再试 - 第3次失败才exit ## 预期效果 - 网络偶发抖动导致的pip/npm安装失败自动恢复,不用人工重跑 - CI成功率进一步提升
xiaoxia added 2 commits 2026-07-20 10:49:53 +08:00
ci(ci-stability): 为前端npm ci添加3次重试机制 (#619)
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 14s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m35s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m14s
AI Code Review / AI Code Review (pull_request) Successful in 4m11s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m58s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m32s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 6m7s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 17s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 44s
256b728076
Collaborator

📊 审查概览

  • 整体评价:有建议
  • 严重问题数量:0 个
  • 一般建议数量:2 个

需修改的问题(严重)

💡 改进建议(一般)

  1. [scripts/ci/run_unit_tests.sh] 代码重复

    • 具体内容:脚本中存在三个结构完全相同的 for 循环用于处理 pip 安装重试。建议将重试逻辑提取为一个 Shell 函数(例如 retry_install),接收命令和包名作为参数,以减少代码冗余,提高可维护性。
  2. [scripts/ci/run_unit_tests.sh, scripts/ci/step_frontend_install.sh] Shell 变量未加引号

    • 具体内容:在条件判断 [ $i -eq 3 ] 中,变量 $i 建议使用双引号包裹,即 [ "$i" -eq 3 ]。虽然在此场景下 $i 的值是可控的数字,但保持变量引用加引号是编写健壮 Shell 脚本的最佳实践,可以防止潜在的空值或包含空格导致的语法错误。

良好实践

  1. 增加重试机制:针对 CI 环境中可能出现的网络波动,为 pip installnpm ci 添加了重试逻辑,显著提高了构建的稳定性。
  2. 逻辑控制严谨:重试循环中使用了 && break 确保成功即退出,以及 [ $i -eq 3 ] && exit 1 确保彻底失败时脚本正确终止,逻辑清晰正确。
  3. 命令使用规范:使用 python3 -m pip 代替直接调用 pip,能更明确地指定 Python 环境;docker run 使用了 --rm 参数,确保容器退出后自动清理,避免占用磁盘空间。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 10:54:03 | 模型:

### 📊 审查概览 - 整体评价:有建议 - 严重问题数量:0 个 - 一般建议数量:2 个 ### ❌ 需修改的问题(严重) 无 ### 💡 改进建议(一般) 1. **[scripts/ci/run_unit_tests.sh] 代码重复** - 具体内容:脚本中存在三个结构完全相同的 `for` 循环用于处理 pip 安装重试。建议将重试逻辑提取为一个 Shell 函数(例如 `retry_install`),接收命令和包名作为参数,以减少代码冗余,提高可维护性。 2. **[scripts/ci/run_unit_tests.sh, scripts/ci/step_frontend_install.sh] Shell 变量未加引号** - 具体内容:在条件判断 `[ $i -eq 3 ]` 中,变量 `$i` 建议使用双引号包裹,即 `[ "$i" -eq 3 ]`。虽然在此场景下 `$i` 的值是可控的数字,但保持变量引用加引号是编写健壮 Shell 脚本的最佳实践,可以防止潜在的空值或包含空格导致的语法错误。 ### ✅ 良好实践 1. **增加重试机制**:针对 CI 环境中可能出现的网络波动,为 `pip install` 和 `npm ci` 添加了重试逻辑,显著提高了构建的稳定性。 2. **逻辑控制严谨**:重试循环中使用了 `&& break` 确保成功即退出,以及 `[ $i -eq 3 ] && exit 1` 确保彻底失败时脚本正确终止,逻辑清晰正确。 3. **命令使用规范**:使用 `python3 -m pip` 代替直接调用 `pip`,能更明确地指定 Python 环境;`docker run` 使用了 `--rm` 参数,确保容器退出后自动清理,避免占用磁盘空间。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 10:54:03 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-20 10:54:11 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit a60969ba50 into develop 2026-07-20 10:56:02 +08:00
auto-approve-bot deleted branch feature/ci-pip-npm-retry 2026-07-20 10:56:02 +08:00

🗑️ 预览环境已清理

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

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

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

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #627 | | 预览链接 | [https://pr-627.preview.xiaoxiajianji.com](https://pr-627.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Sign in to join this conversation.