嗨,
在我们的 GitHub 存储库中,我们需要运行 e2e 测试,并且仅在拉取请求 (PR) 时才执行 已准备好合并(例如,至少获得一项批准)。我们不想将这些测试包含在基本测试中 拉取请求检查。
我们的 e2e 测试大约需要 10-15 分钟才能完成。我们选择了 GitHub Merge Queue 并准备了 在
gate.yml
事件上运行的 merge_group
工作流程。此外,我们还设置了
受保护分支的状态检查。
我们保留合并队列配置大部分默认:
合并单个 PR 时,一切正常。然而,当我们对 PR A 和 PR B 进行排队时,就会出现问题:
gate.yml
工作流程开始。gate.yml
工作流程也随之启动。gate.yml
工作流程成功完成,并且 PR A 已合并。gate.yml
工作流程也成功完成,但 PR B 未合并 – 相反,PR B 的 gate.yml
工作流程重新启动。gate.yml
运行后才会合并,这还需要 10 分钟。PR B 的
gate.yml
工作流程执行了两次,这是多余的并且会引入延迟。
gate.yml
工作流程不会为单个 PR 运行两次?名称:门 在: 合并组: 类型: - 检查请求 职位:e2e-阶段:
权限: id 令牌:写入 内容: 阅读 拉取请求:读取 名称: e2e-阶段 使用:./.github/workflows/rw-rush-build-e2e-tests.yml 秘密:继承准备合并: 运行: 组:infra1-runners-arc 标签: 跑步者-小号 如果:总是() 需求: - e2e阶段 步骤: - name:检查所需作业是否成功 使用:re-actors/alls-green@release/v1 和: 允许跳过:${{ toJSON(needs) }} 工作:${{ toJSON(需要) }}
非常感谢您的帮助和提示
问题主要是由于并行运行而产生的。因此,最简单的解决方案是一次仅运行一个工作流程。不允许并行运行。
为您的
gate
工作流程实现缓存机制
- name: Cache E2E Test Results
uses: actions/cache@v3
with:
path: ./e2e-test-results
key: e2e-${{ github.event.pull_request.head.sha }}
并在运行测试之前检查缓存
- name: Check Cache for Test Results
id: cache-check
uses: actions/cache@v3
with:
path: ./e2e-test-results
key: e2e-${{ github.event.pull_request.head.sha }}
- name: Run E2E Tests
if: steps.cache-check.outputs.cache-hit != 'true'
run: ./run-e2e-tests.sh
或者选项 3 可能是仅在批准后才触发 e2e 测试。