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 будет пустым, несмотря на успешную вставку данных на этапе сборки.

3

Решение

Согласно странице вопросов Gitlab: Обмен сервисами между этапами сборки. Способ настройки Gitlab-CI таков:

каждое задание выполняется в каждом задании независимо от других,
в том числе потенциально работающие на разных машинах. И услуги
запускаются локально на каждого бегуна. Там нет способа для одной работы, чтобы получить доступ к
сервис на другого бегуна. На GitLab.com мы даже перерабатываем
машина после каждой работы запускается, так что все службы будут уничтожены.
@markpundsack

Хотя это 7 месяцев, проблема все еще открыта в это время. Вопрос получения данных от mysql также проблема, так как сервисы не монтируют тома (я не думаю, что существуют какие-либо планы по добавлению этой функции), поэтому данные застряли внутри mysql контейнер.

Таким образом, вы можете справиться с этим несколькими способами:

  1. Есть setup а также test в той же работе
  2. Создать докер SQL с уже добавленными данными (плохая практика, но если вам это нужно)
  3. Создать дамп в setup и поделиться как артефакт, а затем перезагрузить эти данные с test

РЕДАКТИРОВАТЬ: Добавление примечания, что с помощью expire_in Компонент для артефактов может быть полезен, так как вы не хотите хранить кучу данных, которые вам могут не понадобиться вечно.

EDIT2:
После исследования еще немного, я нашел этот Гитлаб. Вы можете сделать следующее:

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/
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]