如何在GitLab CI中通过单个父阶段触发所有E2E测试作业?
一键触发全部E2E测试作业的实现方案
完全可以实现,只需要新增一个手动触发的控制作业,配合变量规则让四个E2E作业在控制作业触发后自动运行。具体配置调整如下:
1. 调整阶段顺序
首先在CI配置的stages中新增一个触发阶段,确保它在E2E测试阶段之前:
stages: - setup-project - trigger-e2e # 新增的触发阶段 - e2e-test # 其他已有阶段...
2. 新增手动触发控制作业
添加一个仅用于触发的作业,点击它就能激活所有E2E分片作业:
trigger-e2e-all: stage: trigger-e2e needs: ['setup-project'] # 确保前置环境准备完成后才能触发 tags: - private rules: - when: manual # 仅手动触发 script: - echo "已触发全部E2E测试分片" variables: TRIGGER_E2E: "true" # 传递触发信号的变量
3. 修改E2E模板的规则逻辑
更新原有的.e2e-config-template,让四个E2E作业在两种场景下自动运行:合并请求目标为master分支时,或者触发变量存在时。其他情况不会显示手动按钮,避免误操作:
.e2e-config-template: &e2e-config-template stage: e2e-test needs: ['trigger-e2e-all'] # 依赖触发作业(间接保证setup完成) interruptible: true image: xxx/xxx/... allow_failure: false tags: - private rules: - if: "$CI_MERGE_REQUEST_IID != null && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'master'" when: always - if: "$TRIGGER_E2E == 'true'" when: always - when: never # 其他情况不运行,也不显示手动按钮
4. 保留原有E2E分片作业
四个E2E分片作业无需修改脚本部分,继续沿用原配置即可:
e2e 1/4: <<: *e2e-config-template script: - yarn install --check-files - echo "127.0.0.1 abc.def.gh" >> /etc/hosts - apt install lsof - yarn test:e2e --shard=1/4 e2e 2/4: <<: *e2e-config-template script: - yarn install --check-files - echo "127.0.0.1 abc.def.gh" >> /etc/hosts - apt install lsof - yarn test:e2e --shard=2/4 # e2e 3/4、e2e 4/4 配置同上...
运行逻辑说明
- 日常开发时,只需点击
trigger-e2e-all的"运行"按钮,该作业完成后会自动触发四个E2E分片作业全部运行,无需再逐个点击。 - 当合并请求目标分支为
master时,四个E2E作业会自动启动,无需手动触发,保留原有自动测试逻辑。
内容的提问来源于stack exchange,提问作者Hubert Chauvat
相关产品推荐
相关产品推荐

