使用 PostgreSQL
由于许多应用程序依赖 PostgreSQL 作为它们的数据库,因此您最终需要它来运行您的测试。下面将指导您如何使用 GitLab Runner 的 Docker 和 Shell executor 执行此操作。
将 PostgreSQL 与 Docker executor 一起使用
要想在极狐GitLab UI 上为服务容器传递变量,您必须定义变量。您必须在群组或项目中定义您的变量,然后在作业中调用这些变量,如下所示。
在 Postgres 15.4 及以后版本,如果扩展脚本的名称中包含引号、\
或 $
,则 Postgres 不会将模式或所有者名称替换到扩展脚本中。如果没有配置 CI 变量,则变量值将使用环境变量名称作为字符串。例如,POSTGRES_USER: $USER
将导致 POSTGRES_USER
变量设置为 ‘$USER’,这会导致 Postgres 显示以下错误:
Fatal: invalid character in extension
解决方法是在极狐GitLab CI/CD 变量中设置变量,或者以字符串形式设置变量:
-
在极狐GitLab 中设置 Postgres 变量。在极狐GitLab UI 中设置的变量不会传递到服务容器中。
-
在
.gitlab-ci.yml
文件中,指定 Postgres 镜像:default: services: - postgres
-
In the
.gitlab-ci.yml
file, add your defined variables:variables: POSTGRES_DB: $POSTGRES_DB POSTGRES_USER: $POSTGRES_USER POSTGRES_PASSWORD: $POSTGRES_PASSWORD POSTGRES_HOST_AUTH_METHOD: trust
关于为
host
使用postgres
的更多详情,可以查看服务如何链接到作业。 -
配置您的应用以使用数据库,比如:
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 executor 一起使用
您还可以在手动配置的服务器上使用 PostgreSQL,这些服务器将 GitLab Runner 与 Shell executor 一起使用。
首先安装 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