我正在用Vue.js构建我的第一个Web应用程序,并在开发过程中使用Docker虚拟化服务器端MySQL数据库(为用户提供简单的云保存选项)。我还使用赛普拉斯在前端运行了E2E测试,包括可能的用户与数据库的交互(或者与我的API的交互,然后将其发送给数据库的相应请求)。我现在要做的是创建一个GitLab管道,该管道可以自动运行我的Cypress测试,这需要运行Docker DB。
在本地运行我的应用程序时,我需要执行以下步骤:
docker-compose up
在终端中运行我的3个Docker容器(Node.js API,MySQL DB,PHP Adminer)。npm run serve
在开发模式下运行我的应用。现在,我想在 .gitlab-ci.yml 中自动化整个过程。我能够构建该应用程序并运行Cypress测试,但是在运行Cypress之前我不知道如何运行Docker容器,这样我的测试才能真正与虚拟DB交互。在调用Cypress之前,我只是尝试将docker-compose up
命令添加到脚本中,但是随后管道失败,因为它不知道该命令。然后,我浏览了有关如何将docker-compose导入到您的管道中的不同指南,但是仍然没有任何效果。
在尝试使用那些不成功的指南之前,我的yml文件看起来像这样:
image: cypress/base:10
stages:
- test
- build
cache:
paths:
- node_modules/
run_cypress:
stage: test
script:
- cd docker
- docker-compose up
- cd ../code
- npm install
- npm run cypress:open
artifacts:
expire_in: 1 week
when: always
paths:
- [redacted]
build_code:
stage: build
script:
- cd code
- npm install
- npm run build
正如我所说,该脚本在docker-compose up
行中失败,但是没有它就可以正常运行。测试也可以使用自定义cypress:open
脚本正确执行,但是大多数测试失败,因为没有Docker,数据库当然不会真正运行。那么,在执行测试之前,为了使脚本知道docker-compose
并让其正确运行Docker,我需要添加或更改什么?
答案 0 :(得分:3)
您需要使用gitlab/dind
图片。不是cypress/base:10
我知道它不是docker-compose,因为cypress / base:10在docker中不支持docker,所以类似这样。
image: gitlab/dind
run_cypress:
stage: test
script:
- docker pull $CONTAINER_COMMIT_IMAGE
- >
docker run
-p 80:3000
-d $CONTAINER_COMMIT_IMAGE
- >
docker run --net="host" $CONTAINER_COMMIT_IMAGE /bin/bash -c npm install && npx cypress run