Gitlab CI:保持阶段之间的MySQL数据

如何在不同的构build阶段持续保存MySQL数据?

我把MySQL设置为服务,但是从构build阶段到部署阶段MySQL数据库是空的,我无法find任何信息。

示例gitlab-ci.yml

 image: php:latest services: - mysql:5.6 stages: - build - deploy build: stage: build script: - [INSERT MYSQL DATA] allow_failure: false artifacts: when: on_success paths: - /var/lib/mysql/ deploy: stage: deploy script: - [MYSQL DUMP] dependencies: - build allow_failure: false when: on_success 

即使在构build阶段成功插入数据,MySQL转储也将是空的。

按照Gitlab问题页面: 在构build阶段之间共享服务 。 Gitlab-CI的build立方式是这样的:

每个作业在每个作业中运行都是独立运行的,其中包括可能运行在不同的机器上。 这些服务在每个跑步者本地运行。 一个工作无法访问另一个跑步者的服务。 在GitLab.com上,我们甚至在每个作业运行之后回收机器,这样所有的服务都将被销毁。 @markpundsack

虽然这是7个月大,但这个问题仍然是开放的。 从mysql获取数据的问题也是一个问题,因为服务不装入卷(我不相信任何计划存在添加此function),所以数据被困在mysql容器内。

所以你可以通过几种方法来处理:

  1. 在相同的工作中进行setuptest
  2. 创build一个所有数据已添加的SQL泊坞窗(不好的做法,但如果你需要它)
  3. setup创build转储并将其作为工件共享,然后使用test重新加载该数据

编辑:添加一个笔记,使用expire_in组件的工件可能是有用的,因为你不想存储你可能永远不需要的一堆数据。

编辑2:经过一番研究,我发现这个由gitlab。 您可以执行以下操作:

 services: - mysql variables: # Configure mysql service (https://hub.docker.com/_/mysql/) MYSQL_DATABASE: hello_world_test MYSQL_ROOT_PASSWORD: mysql connect: image: mysql script: - echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE" - SOME DATABASE DUMPING artifacts: when: on_success paths: - /var/lib/mysql/