我需要一个 Gitlab CI 设置来使用 mysql 数据库(普通 mysql 映像)和专用的 Flyway 迁移(自定义 docker 映像)进行集成测试。因此,我尝试将 mysql 定义为服务,并将我的自定义 docker 映像定义为服务。由于某种原因,flyway 无法连接到 MySQL 数据库(可能是因为它在 MySQL 数据库准备好连接之前启动)。
我正在从 Travis CI 迁移到免费的 Gitlab CI 版本(共享运行程序)。在 Travis CI 中,我使用一个 docker-compose 文件来运行数据库,等待它可以访问,然后运行 flyway 迁移,然后我的集成测试连接到 MySQL 数据库。
请注意,出于某种原因,飞路迁移位于专用的 docker 映像中。我知道我的问题可以通过将 flyway 合并到 mysql 映像或将其合并到应用程序本身来解决。但是,在我的用例中有技术原因不这样做。
到目前为止我尝试过的替代步骤:
使用 docker:dind 手动启动 mysql db 和 flyway。虽然这有效,但我无法从我的集成测试连接到 mysql 数据库。这似乎是 docker 中 docker 的一个限制。
使用 docker:dind 针对 mysql 服务手动运行 flyway 迁移。在这种情况下,flyway 无法连接到 mysql 服务,因为它们位于不同的网络中。
我创建了一个微型示例,我试图在其中对普通 MySQL 数据库运行简单的迁移迁移。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
Run Code Online (Sandbox Code Playgroud)
dockerfile 是对基本 flyway 映像的简单添加:
FROM boxfuse/flyway:5.2.0-alpine
ENV FLYWAY_EDITION community
COPY migrations /flyway/sql/
Run Code Online (Sandbox Code Playgroud)
我希望在管道日志中看到 Flyway 迁移。相反,我看到了这个错误:
https://gitlab.com/Brutus5000/gitlab-services-test/-/jobs/139577852
*** 警告:服务 runner-72989761-project-10117031-concurrent-0-registry.gitlab.com__brutus5000__gitlab-services-test-2 可能没有正确启动。
运行状况检查错误:退出代码 1
健康检查容器日志:2018-12-28T12:35:50.592931651Z 无主机或端口
服务容器日志:2018-12-28T12:35:49.751790056Z Flyway Community Edition 5.2.0 by Boxfuse 2018-12-28T12:35:50.942865457Z 错误:2018-12-258257Z 错误:2018-12-25825107 无法连接到数据库7 7 (jdbc:mysql://mysql/test?useSSL=false) for user 'root': Communications link failure 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.942937423Z 2018-2018-Z 2018-19 成功发送了最后一个数据包:20189-T2018-Z服务器是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。2018-12-28T12:35:50.942943453Z
| 归档时间: |
|
| 查看次数: |
1146 次 |
| 最近记录: |