{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

由于许多应用程序依赖 PostgreSQL 作为其数据库,因此您最终需要它来运行您的测试。下面将指导您如何使用极狐GitLab Runner 的 Docker 和 Shell 执行器来实现这一点。

使用 Docker 执行器的 PostgreSQL

要将极狐GitLab UI 中设置的变量传递给服务容器,您必须定义变量。您必须将您的变量定义为群组或项目,然后在您的作业中调用这些变量,如以下解决方案所示。

Postgres 15.4 及更高版本不会在扩展脚本中替换模式或所有者名称,如果它们包含引号 (“)、反斜杠 () 或美元符号 ($)。如果 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

您可以使用在 DockerHub 上任何其他可用的 Docker 镜像。例如,要使用 PostgreSQL 14.3,服务变为 postgres:14.3

postgres 镜像可以接受一些环境变量。

使用 Shell 执行器的 PostgreSQL

您还可以在使用 Shell 执行器的极狐GitLab Runner 的手动配置服务器上使用 PostgreSQL。

首先安装 PostgreSQL 服务器:

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

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

sudo -u postgres psql -d template1

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

{{< alert type=”note” >}}

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

{{< /alert >}}

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