如何使用相关的flyway迁移服务设置gitlab-ci mysql服务?

时间:2018-12-28 13:26:56

标签: gitlab-ci

我需要一个Gitlab CI设置,用于与mysql数据库(纯mysql映像)和专用的flyway迁移(自定义docker映像)进行集成测试。因此,我尝试将mysql定义为服务,并将自定义docker映像定义为服务。由于某种原因,flyway无法连接到MySQL数据库(可能是因为它在MySQL数据库准备好连接之前就已启动)。

我正在从Travis CI迁移到免费的Gitlab CI版本(共享运行程序)。在Travis CI中,我使用了docker-compose文件来运行数据库,等待它可以访问,然后进行运行迁移,然后将集成测试连接到MySQL数据库。

请注意,出于某种原因,飞行路线迁移位于专用的Docker映像中。我知道,通过将flyway合并到mysql映像中或将其合并到应用程序本身中,可以解决我的问题。但是,在我的用例中,有技术原因不这样做。

到目前为止我尝试过的替代步骤:

  • 使用docker:dind手动启动mysql db和flyway。在这种情况下,我无法通过集成测试连接到mysql db。这似乎是docker在docker中的局限性。

  • 使用docker:dind针对mysql服务手动运行flyway迁移。在这种情况下,flyway无法连接到mysql服务,因为它们位于不同的网络中。

我创建了一个微型示例,在该示例中,我试图对纯MySQL数据库运行简单的flyway迁移。 Docker镜像需要首先构建一次,这有点递归。 您可以在此处查看代码: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

  

***警告:ServiceRunner-72989761-project-10117031-concurrent-0-registry.gitlab.com__brutus5000__gitlab-services-test-2可能无法正常启动。

     

健康检查错误:   退出代码1

     

运行状况检查容器日志:   2018-12-28T12:35:50.592931651Z没有主机或端口

     

服务容器日志:   Boxfuse于2018-12-28T12:35:49.751790056Z Flyway社区版5.2.0   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


0 个答案:

没有答案