2017-02-20 1 views
0

다른 빌드 단계간에 MySQL 데이터를 유지하려면 어떻게해야합니까?Gitlab CI : 스테이지간에 MySQL 데이터 유지하기

저는 MySQL을 서비스로 설정했습니다. 그러나 구축 단계에서 배포 단계로 갈 때 MySQL 데이터베이스는 비어 있으며 이에 대한 정보를 찾을 수 없습니다.

gitlab-ci.yml : MySQL의 덤프가 성공적으로 빌드 단계에서 데이터를 삽입에도 불구하고 빈 것

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 

.

답변

1

Gitlab 문제 페이지 당 : Share service between build stages. 각 작업은 각 작업에서 실행

잠재적으로 서로 다른 시스템에서 실행을 포함하여, 독립적으로의 를 실행 : Gitlab-CI가 설정하는 방법은 그런입니다. 서비스는 각 러너에서 로컬로 실행됩니다. 한 직장에서 다른 주자의 서비스에 액세스하는 방법은 없습니다. GitLab.com에서는 각 작업이 실행 된 후에 기계를 재활용하기 때문에 서비스가 모두 파괴됩니다. @markpundsack

비록 7 개월이지만 아직까지는이 문제가 여전히 열려 있습니다. mysql에서 데이터를 가져 오는 문제는 서비스가 볼륨을 마운트하지 못하기 때문에 문제입니다 (이 기능을 추가 할 계획이 없다고 생각합니다). 따라서 데이터는 mysql 컨테이너 안에 고정되어 있습니다.

  1. 모든 데이터가 이미 추가 된 (나쁜 관행은 SQL 고정 표시기 만들기 같은 일
  2. 에서 setuptest을 가지고 있지만, 당신이 그것을 필요로하는 경우에 :

    그래서 당신은 몇 가지 방법으로이 문제를 처리 할 수 ​​있습니다)

  3. test

편집하여 데이터를 다시로드 setup에서 덤프를 만들고 유물로 공유 : 이슈에 expire_in 구성 요소를 사용하는 메모를 추가하면 영원히 필요하지 않을 수있는 많은 데이터를 저장하지 않으므로 유용 할 수 있습니다.

EDIT2 : 더 자세히 조사한 결과, this은 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/ 
+0

이 호스트 컨테이너에 MySQL의 서비스에'는/var/lib 디렉토리/mysql'에서 데이터를 공유하고 유물로 있음을 사용할 수 없습니다? –

+0

서비스에 액세스해야하는'/ var/lib/mysql '. 'artifact'를 사용할 때 현재 이미지에 대해 그것을하고 있습니다. 당신은 빌드 단계를위한 이미지로 mysql을 시도 할 수있다. – jrbeverly

+0

gitlab에 의해 문서화 된 케이스를 포함하도록 대답하도록 편집했다. 이를 사용하여 데이터베이스를 채우고 출력을 아티팩트로 공유 할 수 있습니다. – jrbeverly