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

如何在不同的构建阶段之间保留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转储将为空.

最佳答案
根据Gitlab问题页面:Share service between build stages.Gitlab-CI的设置方式如下:

each job is run in each job is run independently of the others,
including potentially running on different machines. And the services
are run locally on each runner. There’s no way for one job to access a
service on a different runner. On GitLab.com,we even recycle the
machine after each job runs so the services would all be destroyed.
@markpundsack

尽管已经存在7个月了,但该问题目前仍未解决.从mysql获取数据的问题也是一个问题,因为服务无法装载卷(我不相信有任何计划可以添加此功能),因此数据被卡在mysql容器内.

因此,您可以通过以下两种方式处理此问题:

>在同一工作中进行设置和测试
>创建一个已经添加了所有数据的SQL docker(不好的做法,但是如果需要的话)
>在设置中创建转储并共享为工件,然后通过测试重新加载该数据

编辑:添加一条注释,将expire_in组件用于工件可能是有用的,因为您不想存储一堆数据,您可能永远不需要.

编辑2:
经过研究后,我找到了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/

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...