使用GitLab CI / CD管道,如何在Docker托管数据库的前端上运行赛普拉斯测试?

时间:2020-08-01 15:14:26

标签: npm docker-compose continuous-integration gitlab cypress

我正在用Vue.js构建我的第一个Web应用程序,并在开发过程中使用Docker虚拟化服务器端MySQL数据库(为用户提供简单的云保存选项)。我还使用赛普拉斯在前端运行了E2E测试,包括可能的用户与数据库的交互(或者与我的API的交互,然后将其发送给数据库的相应请求)。我现在要做的是创建一个GitLab管道,该管道可以自动运行我的Cypress测试,这需要运行Docker DB。

在本地运行我的应用程序时,我需要执行以下步骤:

  1. 我使用自己的 docker-compose.yml 通过docker-compose up在终端中运行我的3个Docker容器(Node.js API,MySQL DB,PHP Adminer)。
  2. 我通过npm run serve在开发模式下运行我的应用。
  3. 现在Docker容器和应用程序正在运行,我也可以通过npm成功运行Cypress测试。

现在,我想在 .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,我需要添加或更改什么?

1 个答案:

答案 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