2017-05-26 81 views
0

首先,我是CI和GitLab的新手,所以我可能會說些沒什麼意義的東西。如果發生這種情況,我很抱歉,請詢問更多詳情/信息。在GitLab中運行管道時使用外部數據庫

我有一個在GitLab上託管的項目(Laravel),我正在使用它們的CI來運行測試。目前,我的測試沒有使用任何數據庫,一切正常。

我現在處於需要做數據測試的情況。我面臨的問題是我有三個數據庫:一個是由我的應用程序管理的數據庫,另外兩個是舊數據庫。

每次管道運行時都會重新創建一個由應用程序管理的管道,它是一次性的(用於測試),我使用工廠來處理數據。所以,這裏沒有問題。

然而,正如我所說,另外兩個是遺留的,除了能夠讀取數據之外,我無法控制它們。

我的測試,以及其中一些需要來自這些數據庫的數據,但我不知道如何編寫gitlab-ci YAML文件來使用託管在另一臺服務器(UAT服務器)上的數據庫。

我希望有人能幫忙。

+0

但究竟是什麼問題?您只需將測試指向數據庫並使用它。那麼更多關於如何建立安全連接?也許如何連接到在你的本地網絡中運行的數據庫?如何從遺留數據庫轉儲數據並在CI中重新創建它們? –

+0

指向數據庫需要在YAML文件中有用戶名和密碼,我不喜歡出於安全原因(他們將明確表示)。我會考慮如果我能夠以某種方式限制訪問權限(我已經在我的網站上使用IP地址),但我想不出一種方法來實現它。 每次重新創建數據庫似乎都很昂貴,我需要將轉儲存儲在某個地方,同樣出於安全原因,我也不喜歡。 – giuliot

+0

第一個可以通過https://docs.gitlab.com/ee/ci/variables/#secret-variables解決,也許是一個VPN來建立安全連接。或者,也許只需在舊數據庫的同一LAN上設置專用運行程序即可。但看起來你的問題更多的是關於你對安全性的關注,而不是CI配置。 –

回答

0

我在與@ jakub-kania進行交流以及其他一些研究後回答了我自己的問題。

我最終做的是在gitlab運行器和託管數據庫的服務器之間創建一個ssh隧道,並使用Gi​​tLab祕密變量來存儲數據庫的用戶名和密碼。

所以,這是你需要做的。

  1. 創建一個私有/公共密鑰對。不管你在哪裏複製它們在哪裏都不重要。

  2. 在託管數據庫的服務器上創建新用戶。這不是絕對必要的,您可以使用現有用戶,但它更易於保護(您可以使用--disabled-password--disabled-login選項創建它)。

  3. 將您之前創建的公鑰添加到新用戶的authorized_keys文件中。

  4. 請按照此頁上的說明https://docs.gitlab.com/ee/ci/ssh_keys/README.html#ssh-keys-when-using-the-docker-executor

  5. 爲DB用戶名和密碼創建兩個祕密變量,名爲BLOG_DB_USERNAMEBLOG_DB_PASSWORD

  6. 配置您的應用程序以使用存儲在祕密變量中的用戶名和密碼。就我而言,我有一個Laravel應用程序,所以我增加了以下我.gitlab-ci.yml文件

    - echo >> .env 
    - echo "BLOG_DB_USERNAME=$BLOG_DB_USERNAME" >> .env 
    - echo "BLOG_DB_PASSWORD=$BLOG_DB_PASSWORD" >> .env 
    

的腳本部分,我希望這可以幫助別人了。

相關問題