我希望在Gitlab管道中运行Cypress测试。我使用的是Cypress/included:12.8.1 docker镜像,因为它与我使用的Cypress版本相匹配。我知道这个Cypress镜像的入口点是cypress run
。管道作业运行,看起来它试图用--config
运行cypress run
命令,然后抛出错误。我想我需要向命令传递一个配置文件,但我不知道如何传递。我在Gitlab仓库中有一个cypress.config.js文件,但Gitlab不提供管道作业访问脚本部分中的仓库文件的方法。
更新1:我已经部分解决了这个问题。我能够让Cypress在管道作业中运行。Cypress文档不是很有帮助。我不得不通过添加entrypoint: [""]
来覆盖默认入口点。当Cypress映像启动时,这会阻止cypress run
自动运行,这会导致错误。cypress run
自动运行并查找未运行的配置文件。现在我遇到的问题是,当Cypress测试完成时,管道作业没有退出。我相当肯定这是由于下一个服务器在后台运行。我试图按照Cypress文档中的描述添加Xvfb命令,但我得到一个错误。
更新2:我已经缩小了问题的范围。我在管道中运行cypress时打开了调试模式,如下所示:DEBUG=cypress:server* npx cypress run --headless --config-file cypress.config.js -c video=false
。使用Xvfb没有任何区别,所以我删除了这些命令。
这是测试完成后Cypress管道作业的最新输出:
cypress:server:cypress about to exit with code 0 +8s
cypress:server:browsers browsers.kill called with no active instance +2s
cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 57714 } +3s
cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 57704 } +1ms
cypress:server:socket-base socket-disconnecting transport close +241ms
cypress:server:socket-base socket-disconnect transport close +0ms
ERROR: Job failed: execution took longer than 1h0m0s seconds
这是我的Gitlab YAML for the Cypress job:
---
cypress tests:
image:
name: cypress/included:12.8.1
entrypoint: [""]
stage: e2e-tests
interruptible: true
dependencies: []
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm
- cache/Cypress
rules:
- exists:
- cypress.config.js
artifacts:
# Store cypress screenshots as artifacts on job failure only
when: on_failure
expire_in: 1 day
paths:
- ${CI_PROJECT_DIR}/cypress/screenshots
- ${CI_PROJECT_DIR}/cypress/videos
script:
- npm ci
- npm run build --omit=dev
- npm run start &
- DEBUG=cypress:server* npx cypress run --headless --config-file cypress.config.js -c video=false
1条答案
按热度按时间gwbalxhn1#
在做了一些测试和研究之后,我找到了解决这个问题的方法。看起来这个问题是关于Electron的,和之前在GitHub上报告的这个问题类似。我没有在无头模式下运行cypress,而是用chrome运行它,管道作业成功退出。这是有效的命令:
npx cypress run --browser chrome --config-file cypress.config.js
。当我将Cypress 12.8.1升级到12.9.0并使用无头模式时,Gitlab管道中没有发生错误。看起来Electron问题最终在12.9.0版本中得到了解决。Chrome或Electron将使用Cypress包含的图像和12.9.0版本在Gitlab管道中工作。