2017-02-20 65 views
0

如何在不同階段持續保存MySQL數據?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的轉儲將盡管在構建階段成功插入數據是空的。

回答

1

根據Gitlab問題頁面:Share service between build stages。這Gitlab-CI設置的方式是這樣的:

每個作業每個作業運行的運行獨立於其他的,包括 在不同機器上運行的可能。而服務 在每個跑步者本地運行。一個作業無法在不同的跑步者上訪問 服務。在GitLab.com上,我們甚至在每個作業運行後回收利用該機器,這樣服務將全部被銷燬。 @markpundsack

雖然這是7個月大,這個問題仍然是在這個時候打開。從mysql獲取數據的問題也是一個問題,因爲服務不會裝入卷(我不相信有任何計劃可以添加此功能),所以數據被卡在mysql容器中。

  1. 在同一個工作
  2. setuptest創建一個SQL搬運工所有數據添加已經(不好的做法,但如果你需要它:

    所以,你可以在一對夫婦的方式來處理這個)

  3. 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/ 
+0

是不是可以將mysql服務中的'/ var/lib/mysql'數據共享到主機容器中並將其用作工件? –

+0

您需要訪問該服務的'/ var/lib/mysql'。當使用'artifact'時,你正在爲當前圖像做它。您可以嘗試使用'mysql'作爲構建步驟的圖像 – jrbeverly

+0

進行編輯以回答包括gitlab記錄的案例。有了這個,你可以填充數據庫,然後將輸出作爲工件共享。 – jrbeverly