如何在不同的构建阶段之间保留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转储仍为空。
答案 0 :(得分:3)
根据Gitlab问题页面:Share service between build stages。 Gitlab-CI的设置方式如下:
每个作业在每个作业中运行独立于其他作业运行, 包括可能在不同机器上运行。和服务 在每个跑步者本地运行。一项工作无法访问 在不同的跑步者服务。在GitLab.com上,我们甚至回收了 每个作业运行后的机器,所以服务都将被销毁。 @markpundsack
虽然已有7个月的历史,但此时此问题仍未解决。从mysql
获取数据的问题也是一个问题,因为服务没有安装卷(我不相信任何添加此功能的计划),因此数据被卡在mysql
容器内。
所以你可以通过以下几种方式解决这个问题:
setup
和test
setup
中创建转储并作为工件共享,然后使用test
编辑:添加使用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/