Help us learn about your current experience with the documentation. Take the survey.

使用 PostgreSQL

  • 版本:Free, Premium, Ultimate
  • 产品:GitLab.com, GitLab Self-Managed, GitLab Dedicated

由于许多应用程序都依赖 PostgreSQL 作为其数据库,因此在运行测试时,您也需要使用它。

将 PostgreSQL 与 Docker 执行器一起使用

要将 GitLab UI 中设置的变量传递给服务容器,您必须定义这些变量。您必须将变量定义为 Group(组)或 Project(项目)级别,然后在您的 job(作业)中调用这些变量,如下面的变通方法所示。

Postgres 15.4 及更高版本不会将 schema 或 owner 名称替换到包含引号 (")、反斜杠 () 或美元符号 ($) 的扩展脚本中。如果未配置 CI 变量,该值将直接使用环境变量名称作为字符串。例如,POSTGRES_USER: $USER 会导致 POSTGRES_USER 变量被设置为 ‘$USER’ 字符串,这会使 Postgres 显示以下错误:

Fatal: invalid character in extension

变通方法是在 GitLab CI/CD 变量中设置您的变量,或者以字符串形式设置变量:

  1. 在 GitLab 中设置 Postgres 变量。在 GitLab UI 中设置的变量不会自动传递给服务容器。

  2. .gitlab-ci.yml 文件中,指定一个 Postgres 镜像:

    default:
       services:
         - postgres
  3. .gitlab-ci.yml 文件中,添加您已定义的变量:

    variables:
      POSTGRES_DB: $POSTGRES_DB
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: $POSTGRES_PASSWORD
      POSTGRES_HOST_AUTH_METHOD: trust

    有关将 postgres 用作 Host 的更多信息,请参阅服务如何链接到作业

  4. 配置您的应用程序以使用该数据库,例如:

    Host: postgres
    User: $POSTGRES_USER
    Password: $POSTGRES_PASSWORD
    Database: $POSTGRES_DB

或者,您也可以在 .gitlab-ci.yml 文件中以字符串形式设置变量:

variables:
  POSTGRES_DB: DB_name
  POSTGRES_USER: username
  POSTGRES_PASSWORD: password
  POSTGRES_HOST_AUTH_METHOD: trust

您可以使用 Docker Hub 上提供的任何其他 Docker 镜像。例如,要使用 PostgreSQL 14.3,服务应设置为 postgres:14.3

postgres 镜像可以接受一些环境变量。有关更多详细信息,请参阅 Docker Hub 上的文档。

将 PostgreSQL 与 Shell 执行器一起使用

您也可以在使用 Shell executor 的手动配置服务器上使用 PostgreSQL。

首先,安装 PostgreSQL 服务器:

sudo apt-get install -y postgresql postgresql-client libpq-dev

下一步是创建一个用户,因此请先登录到 PostgreSQL:

sudo -u postgres psql -d template1

然后,创建一个供您的应用程序使用的用户(在我们的示例中为 runner)。在以下命令中,将 $password 更改为一个强密码。

请确保在以下命令中不要输入 template1=#,因为它是 PostgreSQL 提示符的一部分。

template1=# CREATE USER runner WITH PASSWORD '$password' CREATEDB;

所创建的用户拥有创建数据库的权限(CREATEDB)。接下来的步骤将介绍如何为该用户显式创建一个数据库。这些权限允许您的测试框架根据需要创建和删除数据库。

创建数据库,并为用户 runner 授予该数据库的所有权限:

template1=# CREATE DATABASE nice_marmot OWNER runner;

如果一切顺利,您现在可以退出数据库会话:

template1=# \q

现在,尝试使用用户 runner 连接到新创建的数据库,以检查一切是否已就绪。

psql -U runner -h localhost -d nice_marmot -W

此命令明确指示 psql 连接到 localhost 并使用 md5 认证。如果省略此步骤,您将被拒绝访问。

最后,配置您的应用程序以使用该数据库,例如:

Host: localhost
User: runner
Password: $password
Database: nice_marmot

示例项目

为了方便您,我们设置了一个 PostgreSQL 示例项目,该项目运行在 GitLab.com 上,并使用了我们公开可用的 instance runners

想要在此基础上进行开发吗?Fork(派生)它,提交并推送您的更改。片刻之后,您的更改就会被一个 public runner(公共执行器)拾取,然后 job(作业)便会开始运行。