GitLab:在你的测试管道中使用PostgreSQL数据库

339 阅读2分钟

许多应用程序在GitLab管道内的每次提交都会被自动测试。如果你的应用程序依赖于PostgreSQL这样的数据库,那么使用H2这样的内存数据库来进行测试是很有诱惑力的,因为它更容易为你的测试套件的每次执行进行设置和销毁。虽然这对简单的应用是可行的,但一旦你依赖供应商特定的SQL功能(例如,使用H2中没有的列类型),就不再可能了。

在这篇文章中,我将演示如何在GitLab管道中为Spring Boot应用程序轻松设置PostgreSQL,并提高单元和集成测试的质量。

在你的.gitlab-ci.yml中设置PostgreSQL

Gitlab允许定义(可通过网络访问的)服务,这些服务在管道执行时与你的应用程序容器相连。数据库就是这种服务的完美例子。它们被定义在.gitlab-ci.yml 文件的services: 部分。

services:
  - postgres:13-alpine

postgres服务独立于各个管道作业而存在,所有的作业都可以通过网络调用来访问。

以这种方式定义的服务对你的所有作业都是自动可用的(不过你也可以在每个作业的基础上定义它们)。服务可以通过它的图像名称来访问(其中:后面的一切都被剥离)。postgres.

数据库凭证可以通过variables: 部分来定义。

variables:
  POSTGRES_DB: my_database
  POSTGRES_USER: bernhard
  POSTGRES_PASSWORD: "somepassword"
  POSTGRES_HOST_AUTH_METHOD: trust

配置你的应用程序以使用数据库

你可以像连接网络上的任何数据库一样连接到数据库。在Spring Boot中,最好的做法是通过你的application.properties 文件或直接通过环境变量来定义数据库的连接。

对于上述凭证,你的配置会是这样的。

spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://postgres:5432/my_database
spring.datasource.username=bernhard
spring.datasource.password=somepassword

如上所述,你的数据库服务的主机名是postgres ,这就是为什么你的jdbc连接字符串会连接到postgres:5432 (这是PostgreSQL的默认端口)。

总结

是的,在你的单元和集成测试管道中使用真正的PostgreSQL数据库真的很容易。通过与生产中使用的数据库版本相匹配,你可以避免许多细微的错误,这些错误在依赖内存数据库时可能不明显。