feat(ci): P2-4 基础设施自动重试策略 #653
Reference in New Issue
Block a user
Delete Branch "feat/ci-p2-infra-retry"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
P2-4: CI失败自动重试策略
给基础设施侧容易波动的步骤增加重试机制,降低偶发网络问题导致的CI失败率。
改动清单
1. code-review.yml - Checkout 加重试
actions/checkout@v3步骤增加retry: max_attempts: 22. ci-trigger-monitor.yml - Checkout 加重试
actions/checkout@v3增加重试3. ci-pipeline.yml - Docker login 加重试
已有重试(无需改动)
目标
基础设施类偶发失败率降低 80%+,CI稳定性进一步提升。
📊 审查概览
❌ 需修改的问题(严重)
[.gitea/workflows/ci-pipeline.yml: 468-479, 599-610, 872-883] 重试逻辑缺少失败处理
for循环实现的 Docker 登录重试逻辑中,如果 3 次尝试全部失败,循环结束后脚本会继续向下执行,而不会显式报错退出。虽然脚本开头有set -eu,但登录失败发生在if条件内部,不会触发set -e的退出机制。这将导致后续的docker build或docker pull命令因未登录而报错,错误信息会误导开发者以为是构建问题而非登录问题。for循环结束后(即done之后),添加显式的失败退出逻辑,例如:[.gitea/workflows/ci-trigger-monitor.yml: 24-26, .gitea/workflows/code-review.yml: 28-30] 非标准的 Actions 语法配置
actions/checkout@v3步骤中直接添加retry字段并非 GitHub Actions 或 Gitea Actions 的标准语法。标准规范中,Step 级别不支持retry关键字(通常需要使用continue-on-error或在 Shell 脚本中实现重试)。此配置极大概率会被 Runner 忽略,导致网络波动时无法按预期重试。run脚本中实现,或使用支持重试的第三方 Action。💡 改进建议(一般)
scripts/docker-login.sh)并添加到仓库中,然后在 Workflow 中通过run: scripts/docker-login.sh调用,便于统一维护和修改。✅ 良好实践
ci-pipeline.yml中使用printf '%s'代替echo处理密码,有效避免了密码中包含转义字符导致的安全风险或解析错误。🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 19:59:54 | 模型:
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #653 已关闭或合并,对应的预览环境已被清理。