fix(ci): 修复preview cleanup的PR号提取和SSH安装问题 #504

Merged
auto-approve-bot merged 1 commits from fix/preview-cleanup-alpine into develop 2026-07-18 14:01:24 +08:00
Owner

修复内容

Bug 1: PR号提取错误

PR closed事件中 GITHUB_REF 格式与opened事件不同,sed提取出来的是commit SHA而非PR号。
修复: 优先从 GITHUB_EVENT_PATH 读取PR号,fallback到正则提取,兼容所有事件类型。

Bug 2: SSH安装失败(No package manager found)

部分runner实例没有包管理器,直接报错退出。
修复:

  • 先检测ssh是否已预装,有就跳过安装
  • 增加yum/dnf支持
  • 失败时输出更详细的调试信息

同时修复

  • Comment步骤的PR号提取(同样的问题)

验证

  • YAML语法检查通过
  • 关闭测试PR后验证cleanup是否正常工作
## 修复内容 ### Bug 1: PR号提取错误 PR closed事件中 `GITHUB_REF` 格式与opened事件不同,sed提取出来的是commit SHA而非PR号。 **修复:** 优先从 `GITHUB_EVENT_PATH` 读取PR号,fallback到正则提取,兼容所有事件类型。 ### Bug 2: SSH安装失败(No package manager found) 部分runner实例没有包管理器,直接报错退出。 **修复:** - 先检测ssh是否已预装,有就跳过安装 - 增加yum/dnf支持 - 失败时输出更详细的调试信息 ### 同时修复 - Comment步骤的PR号提取(同样的问题) ## 验证 - YAML语法检查通过 - 关闭测试PR后验证cleanup是否正常工作
xiaoxia added this to the [CI] Phase 3:质量提升 milestone 2026-07-18 13:57:01 +08:00
xiaoxia added 1 commit 2026-07-18 13:57:01 +08:00
fix(ci): 修复preview cleanup的PR号提取和SSH安装问题
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 51s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 53s
AI Code Review / AI Code Review (pull_request) Successful in 2m27s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m7s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m4s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 4m2s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m41s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 4m22s
Preview Cleanup / Cleanup Preview Environment (pull_request) Failing after 1s
01f58fbbe2
- PR号提取改用GITHUB_EVENT_PATH优先,兼容closed事件
- SSH安装增加预检测,支持更多包管理器(apk/apt/yum/dnf)
- 修复comment步骤同样的PR号提取问题

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #504

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

  1. .gitea/workflows/preview-cleanup.yml 第24行:存在 python3 依赖缺失导致脚本崩溃的风险。代码中引入了 python3 来解析 JSON,但在后续的安装逻辑中(如 apk 分支)并未安装 Python。在 Alpine 等精简镜像中,Python 默认不存在,且脚本开头设置了 set -eu,这将导致命令找不到时直接退出运行。
  2. .gitea/workflows/preview-cleanup.yml 第29-36行:回退逻辑存在安全隐患。当无法提取到纯数字 PR 号时,代码仅打印 WARNING 但继续执行,并使用可能包含非数字字符(如分支名)的变量拼接路径(/var/www/preview/pr-${PR_NUMBER})。这可能导致误删非预期的目录(例如 pr-main),属于严重的安全逻辑漏洞。

💡 建议(1个可选)

  1. .gitea/workflows/preview-cleanup.yml 第45行:建议在检查 SSH 已存在并 exit 0 之前,确保后续步骤不依赖该步骤产生的环境变量。虽然当前逻辑看起来没问题,但在多步骤的 Job 中,过早 exit 可能会跳过同一 run 块中后续的必要初始化(如果将来添加的话)。目前可接受,但建议保持关注。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 13:59:29 | 模型:

## 代码审查结果 - PR #504 ### ⚠️ 问题(2个需要修改) 1. **.gitea/workflows/preview-cleanup.yml 第24行**:存在 `python3` 依赖缺失导致脚本崩溃的风险。代码中引入了 `python3` 来解析 JSON,但在后续的安装逻辑中(如 `apk` 分支)并未安装 Python。在 Alpine 等精简镜像中,Python 默认不存在,且脚本开头设置了 `set -eu`,这将导致命令找不到时直接退出运行。 2. **.gitea/workflows/preview-cleanup.yml 第29-36行**:回退逻辑存在安全隐患。当无法提取到纯数字 PR 号时,代码仅打印 WARNING 但继续执行,并使用可能包含非数字字符(如分支名)的变量拼接路径(`/var/www/preview/pr-${PR_NUMBER}`)。这可能导致误删非预期的目录(例如 `pr-main`),属于严重的安全逻辑漏洞。 ### 💡 建议(1个可选) 1. **.gitea/workflows/preview-cleanup.yml 第45行**:建议在检查 SSH 已存在并 `exit 0` 之前,确保后续步骤不依赖该步骤产生的环境变量。虽然当前逻辑看起来没问题,但在多步骤的 Job 中,过早 `exit` 可能会跳过同一 `run` 块中后续的必要初始化(如果将来添加的话)。目前可接受,但建议保持关注。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 13:59:29 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-18 14:01:03 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 7c884e5298 into develop 2026-07-18 14:01:24 +08:00
auto-approve-bot deleted branch fix/preview-cleanup-alpine 2026-07-18 14:01:24 +08:00
Sign in to join this conversation.