2017-05-26 51 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 
    

的脚本部分,我希望这可以帮助别人了。

相关问题