Ada*_*son 7 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 转储还是空的。
根据 Gitlab 问题页面:在构建阶段之间共享服务。Gitlab-CI 的设置方式是这样的:
每个作业都独立于其他作业运行,包括可能在不同的计算机上运行。这些服务在每个运行器上本地运行。一项作业无法访问不同运行器上的服务。在 GitLab.com 上,我们甚至在每个作业运行后回收机器,这样服务就会全部被销毁。@markpundsack
尽管已经过去 7 个月了,但该问题目前仍悬而未决。从中获取数据的问题mysql也是一个问题,因为服务不会挂载卷(我不相信存在任何添加此功能的计划),因此数据被卡在容器内mysql。
所以你可以通过以下几种方式来处理这个问题:
setup和test相同的工作setup并作为工件共享,然后使用以下命令重新加载该数据test编辑:添加注释,使用expire_in组件来处理工件可能会很有用,因为您不想存储一堆可能永远不需要的数据。
EDIT2:经过更多研究后,我通过 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/
| 归档时间: | 
 | 
| 查看次数: | 1803 次 | 
| 最近记录: |