Gitlab CI:在各阶段之间保留MySQL数据

时间:2017-02-20 19:34:01

标签: php mysql docker gitlab-ci

如何在不同的构建阶段之间保留MySQL数据?

我已将MySQL设置为服务,但是当从构建阶段进入部署阶段时,MySQL数据库为空,我无法找到有关此内容的任何信息。

示例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

尽管在构建阶段成功插入了数据,但MySQL转储仍为空。

1 个答案:

答案 0 :(得分:3)

根据Gitlab问题页面:Share service between build stages。 Gitlab-CI的设置方式如下:

  

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

虽然已有7个月的历史,但此时此问题仍未解决。从mysql获取数据的问题也是一个问题,因为服务没有安装卷(我不相信任何添加此功能的计划),因此数据被卡在mysql容器内。

所以你可以通过以下几种方式解决这个问题:

  1. 让同一作业中的setuptest
  2. 创建一个SQL docker,其中已添加了所有数据(不好的做法但是如果需要的话)
  3. setup中创建转储并作为工件共享,然后使用test
  4. 重新加载该数据

    编辑:添加使用expire_in组件构建工件的注释可能很有用,因为您不希望存储一堆您可能不需要的数据。

    EDIT2: 在研究了一些之后,我通过gitlab找到了this。您可以执行以下操作:

    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/