Как настроить службу gitlab-ci mysql с зависимой службой миграции? - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужна настройка Gitlab CI для интеграционных тестов с базой данных mysql (обычное изображение mysql) и выделенной миграцией с прохода (настраиваемое изображение докера).Поэтому я попытался определить mysql как сервис и мой собственный образ докера как сервис.По какой-то причине flyway не может подключиться к базе данных MySQL (возможно, потому что она запущена до того, как база данных MySQL готова для соединений).

Я мигрирую с Travis CI на бесплатную версию Gitlab CI (общий бегун),В Travis CI я использовал файл docker-compose для запуска базы данных, ждал, пока он станет доступным, затем запустил миграцию с прохода и после этого мои интеграционные тесты подключались к базе данных MySQL.

Обратите внимание, чтоМиграционные пути по определенной причине находятся в выделенном докере.Я знаю, что моя проблема была бы решена путем слияния пролетного пути с изображением mysql или слияния с самим приложением.Однако в моем случае использования есть технические причины не делать этого.

Альтернативные шаги, которые я пробовал до сих пор:

  • Вращение mysql db и flyway вручную с помощью docker: dind,Хотя это работает, я не могу подключиться к базе данных mysql из моих интеграционных тестов.Похоже, что это ограничение docker в docker.

  • Запуск миграций flyway вручную с помощью docker: dind для службы mysql.В этом случае flyway не может подключиться к сервису mysql, поскольку они находятся в разных сетях.

Я создал микро-пример, в котором я пытаюсь выполнить простую миграцию flyway для простой базы данных MySQL.,Это немного рекурсивно, образ докера нужно сначала собрать один раз.Вы можете увидеть код здесь: https://gitlab.com/Brutus5000/gitlab-services-test.

gitlab-ci.yml имеет следующий вид:

image: docker:stable

services:
  - docker:dind
  - mysql:5.7
  - name: registry.gitlab.com/brutus5000/gitlab-services-test:dev
    command: ["migrate"]

variables:
  CONTAINER_IMAGE: registry.gitlab.com/brutus5000/gitlab-services-test
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  MYSQL_DATABASE: test
  MYSQL_ROOT_PASSWORD: test
  FLYWAY_URL: jdbc:mysql://mysql/test?useSSL=false
  FLYWAY_USER: root
  FLYWAY_PASSWORD: test

stages:
  - build

build:
  stage: build
  script:
    - docker build --tag $CONTAINER_IMAGE:dev .
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
    - docker push $CONTAINER_IMAGE:dev

Dockerfile - это простое дополнение к базовому образу пролетного пути:

FROM boxfuse/flyway:5.2.0-alpine

ENV FLYWAY_EDITION community

COPY migrations /flyway/sql/

Я бы ожидал, что миграция пролетных путей произойдет в журнале конвейера.Вместо этого я вижу эту ошибку:

https://gitlab.com/Brutus5000/gitlab-services-test/-/jobs/139577852

*** ПРЕДУПРЕЖДЕНИЕ: Service runner-72989761-project-10117031-concurrent-0-registry.gitlab.com__brutus5000__gitlab-services-test-2, вероятно, не запустился должным образом.

Ошибка проверки работоспособности: код выхода 1

Журналы проверки работоспособности контейнера: 2018-12-28T12: 35: 50.592931651Z Нет HOST или PORT

Журналы сервисных контейнеров: 2018-12-28T12: 35: 49.751790056Z Flyway Community Edition 5.2.0 от Boxfuse 2018-12-28T12: 35: 50.942865457Z ОШИБКА: 2018-12-28T12: 35: 50.942913738Z Невозможно выполнитьполучить соединение из базы данных (jdbc: mysql: // mysql / test? useSSL = false) для пользователя 'root': сбой канала связи 2018-12-28T12: 35: 50.942919338Z 2018-12-28T12: 35: 50.942922129Z Последнийпакет успешно отправлен на сервер был 0 миллисекунд назад.Драйвер не получил никаких пакетов с сервера.2018-12-28T12: 35: 50.942925648Z --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2018-12-28T12: 35: 50.942929549Z Состояние SQL: 08S01 2018-12-28T12: 35: 50.942932188Z Код ошибки: 0 2018-12-28T12: 35: 50.942934751Z Сообщение: сбой линии связи 2018-12-28T12: 35: 50.942937423Z 2018-12-28T12: 35: 50.942939881Z Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад.Драйвер не получил никаких пакетов с сервера.2018-12-28T12: 35: 50,942943453Z


...