在 GitLab 中使用 运行 管道时使用外部数据库

Using an external database while running pipeline in GitLab

首先,我是 CI 和 GitLab 的新手,所以我可能会说一些没有意义的话。如果发生这种情况,我深表歉意,请索取更多 details/info.

我有一个托管在 GitLab 上的项目 (Laravel),我正在使用他们的 CI 来 运行 测试。目前,我的测试没有使用任何数据库,一切正常。

我现在的情况是需要做一些涉及数据的测试。我遇到的问题是 cing 是我有三个数据库:一个是由我的应用程序管理的数据库,两个是遗留数据库。

每次管道 运行s 时都会重新创建由应用程序管理的那个,它是一次性的(用于测试),我使用工厂来存储数据。所以,这里没有问题。

然而,正如我所说,另外两个是遗留的,除了能够读取数据外,我无法控制它们。

我的测试,其中一些,需要来自这些数据库的数据,但我不知道如何编写 gitlab-ci YAML 文件来使用托管在另一台服务器(UAT 服务器)上的数据库).

希望有人能帮忙

在与@jakub-kania 交流并进行更多研究后,我正在回答我自己的问题。

我最后做的是在 gitlab runner 和托管数据库的服务器之间创建一个 ssh 隧道,并使用 GitLab 秘密变量来存储数据库的用户名和密码。

所以,这就是您需要做的。

  1. 创建一个 private/public 密钥对。将它们复制到不同的地方并不重要。

  2. 在托管数据库的服务器上创建一个新用户。这不是绝对必要的,您可以使用现有用户,但它更容易保护(您可以使用 --disabled-password--disabled-login 选项创建它)。

  3. 将您之前创建的 public 密钥添加到新用户的 authorized_keys 文件中。

  4. 按照此页面上的说明进行操作 https://docs.gitlab.com/ee/ci/ssh_keys/README.html#ssh-keys-when-using-the-docker-executor

  5. 为数据库用户名和密码创建两个秘密变量,称为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
    

我希望这对其他人也有帮助。