Мне нужна настройка 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