如何在GitHub Release Action前强制通过E2E测试
实现Staging E2E测试通过后方可执行生产发布的质量门禁
问题背景
当前工作流流程:
- 用户向分支提交变更
- 创建PR、测试并合并至master分支
- 自动将发布任务排入staging环境队列
- 执行Cypress E2E测试验证staging环境
- 用户手动发布至生产环境
需求:在E2E测试(步骤4)和手动生产发布(步骤5)之间添加质量门禁,若E2E测试失败,禁止执行生产发布。
解决方案
方案1:利用GitHub环境保护规则(推荐)
这是最简洁的原生方案,无需大量修改工作流代码:
- 在GitHub仓库的「Settings」→「Environments」中创建Production环境
- 开启环境保护,勾选「Required checks」,将你的Cypress E2E测试工作流(
cypress.yml)添加到必填检查列表 - 修改手动发布工作流(
Release ECS),指定部署到Production环境:
name: Release ECS on: workflow_dispatch: jobs: deploy_production: runs-on: ubuntu-latest environment: Production # 关联受保护的生产环境 steps: # 此处添加你的生产部署步骤
配置完成后,只有当最近一次master分支的Cypress E2E测试通过,用户才能成功触发生产发布工作流,否则会被GitHub自动拦截。
方案2:在手动发布工作流中添加前置检查
如果无法使用环境保护,可在手动发布工作流中主动验证E2E测试状态:
- 确保
cypress.yml工作流有明确的名称(比如设置name: Cypress E2E Tests) - 修改
Release ECS工作流,添加检查步骤:
name: Release ECS on: workflow_dispatch: jobs: check_e2e_status: runs-on: ubuntu-latest steps: - name: 验证最新Cypress E2E测试状态 run: | # 获取master分支最近一次E2E工作流的运行结果 STATUS=$(gh run list --workflow cypress.yml --branch master --limit 1 --json conclusion --jq '.[0].conclusion') if [ "$STATUS" != "success" ]; then echo "最近一次Cypress E2E测试未通过,禁止发布生产环境" exit 1 fi env: GH_TOKEN: ${{ github.token }} deploy_production: runs-on: ubuntu-latest needs: check_e2e_status steps: # 此处添加你的生产部署步骤
方案3:调整流水线触发逻辑
若需要更严格的自动化控制,可修改现有流水线,确保E2E测试通过后才开放发布入口:
- 修改
deploy_ecs.yml,等待E2E测试完成并成功后,通过GitHub API标记一个成功状态 - 在
Release ECS工作流中添加对该标记的检查,逻辑同方案2
代码补充说明
确保cypress.yml工作流名称清晰,便于识别:
name: Cypress E2E Tests # 明确工作流名称,用于后续检查 on: workflow_dispatch: # 保留原有触发逻辑 jobs: e2e_test: runs-on: ubuntu-latest steps: # 此处保留你的Cypress测试步骤
内容的提问来源于stack exchange,提问作者Oliver Kucharzewski
相关产品推荐
相关产品推荐

