GitLab CI重试Cypress任务未执行spec直接通过问题排查
问题根因说明
这个重试秒过的问题确实和两次运行Run URL相同直接相关,核心诱因是你配置的Cypress ci-build-id参数取值不符合重试场景要求,Cypress对接的录制服务不支持同标识的运行任务重复执行。
- 你当前配置中Cypress启动参数写死了
--ci-build-id $CI_PIPELINE_ID,但GitLab CI的规则是:同一个Pipeline下无论重试多少次作业,$CI_PIPELINE_ID的值都保持不变,唯一变化的是作业维度的$CI_JOB_ID - Cypress录制服务的判定逻辑为:同个
ci-build-id+同个group名称的测试任务,只要服务端已经存在对应运行记录,后续收到相同标识的运行请求时,会直接判定为重复提交,直接返回成功状态、复用之前生成的Run URL,不会触发本地任何测试用例执行,这就是你看到作业仅5秒就结束、没有任何spec执行日志的原因 - 日志里出现的
tput: unknown terminal报错属于无关的终端环境变量问题,首次正常运行时也存在该提示,不会影响测试执行逻辑,可以忽略
修复方案
修改.gitlab-ci.yml中Cypress的启动命令,将作业唯一ID拼入ci-build-id参数,保证每次作业运行(含重试)的build ID全局唯一即可:
test-cypress-chrome: extends: [ .test-job ] stage: test-frontend script: - $COMPOSE_CMD run cypress yarn cy2 run --browser chrome --record --key some-key --ci-build-id $CI_PIPELINE_ID-$CI_JOB_ID --group chrome
该修改不会影响Cypress并行测试的分组能力,只要保证同一次并行触发的作业使用相同build ID即可正常聚合测试结果,重试作业因为生成了新的build ID,会被识别为全新运行任务,正常执行所有测试用例。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

