Используя конвейер GitLab CI / CD, как я могу запустить тесты Cypress во внешнем интерфейсе базы данных, размещенной на Docker? - PullRequest
1 голос
/ 01 августа 2020

Я создаю свое самое первое веб-приложение с Vue. js и использую Docker для виртуализации своей серверной базы данных MySQL (чтобы предоставить пользователям простой вариант сохранения в облаке), в то время как развивающийся. Я также использую Cypress для запуска тестов E2E на моем интерфейсе, включая возможные взаимодействия пользователя с БД (или, скорее, взаимодействия с моим API, который затем отправляет соответствующие запросы в БД). Что я хочу сделать сейчас, так это создать конвейер GitLab, который автоматически запускает мои тесты Cypress, для которых требуется работа Docker БД.

При локальном запуске моего приложения I go, выполнив следующие шаги:

  1. Я запускаю свои 3 Docker контейнера (Node.js API, MySQL DB, PHP Adminer) в терминале через docker-compose up, используя мой docker -compose. yml .
  2. Я запускаю свое приложение в режиме разработки через npm run serve.
  3. Теперь, когда контейнеры Docker и приложение запущены, я могу успешно запустить свои тесты Cypress с npm тоже.

Теперь я хочу автоматизировать весь этот процесс в .gitlab-ci.yml . Мне удалось создать приложение, а также запустить тесты Cypress, но я не могу понять, как запустить мои Docker контейнеры перед запуском Cypress, чтобы мои тесты действительно могли взаимодействовать с виртуальной БД. Я просто попытался добавить в скрипт команду docker-compose up перед вызовом Cypress, но потом конвейер не работает, потому что он не знает эту команду. Затем я просмотрел разные руководства о том, как импортировать 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 Ответ

2 голосов
/ 03 августа 2020

Вам нужно использовать 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
...