在内存数据库中使用H2设置gitlab ciRunner

时间:2019-07-21 19:03:31

标签: java spring-boot h2 gitlab-ci flyway

我正在尝试设置gitlab ci运行程序以在内存数据库中的h2上运行我的测试。在本地没有问题,一切正常。我已经创建了.gitlab-ci.yml文件来也在gitlab上运行构建和测试,但是我只是不知道如何在内存数据库中建立连接。

首先是我的application-test.properties文件。

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

我的h2数据库还运行flyway脚本。它现在运行一个创建所有表的脚本。另外还有beforeValidate.sql脚本和afterMigrate.sql脚本,它们添加了一些通用数据。

我阅读了很多文章,发现可以从Java代码运行tcp服务器。为此,我用一种方法创建了TestConfig java类。

@Bean(initMethod = "start", destroyMethod = "stop")
public Server inMemoryH2DatabaseaServer() throws SQLException {
    return Server.createTcpServer("-tcp", "-tcpAllowOthers").start();
}

我所有的测试均导入此类。因为这只是使用 @Import(TestConfig.class)

最后,我的.gitlab-ci.yml文件:

image: maven:3.3.9

variables:
  POSTGRES_DB: testdb
  POSTGRES_HOST: postgres
  POSTGRES_PORT: 5432
  POSTGRES_USER: sa
  POSTGRES_PASSWORD: password

services:
  - postgres:latest

build:
  stage: build
  script: "mvn compile"

test:
  stage: test
  script: "mvn clean test"

当gitlab使用内存数据库运行我的测试时,它会抛出:

到localhost:5432的连接被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。

我看到的问题:

  1. 如果我从Java代码创建tcp服务器,它将仅在另一个端口上创建新服务器。如果我在createTcpServer方法中添加“ -tcpPort”,“ 5432 ”,则无法启动,因为application-test.properties中的服务器使用此端口。 (这也让我感到困扰。我在这里使用的任何端口并在本地运行测试都会引发该端口已被使用的异常)
  2. 我看到的另一件事是,即使我更改了gitlab ci文件中的端口,它也始终使用端口5432。

我的问题:

  1. 是否有机会在application-test.properties中允许其他tcp连接?
  2. 有什么方法可以在内存数据库中创建用于从Java代码进行测试的方法吗?然后如何定义服务器名称? (我尝试了多种方法,但是我不知道如何定义服务器名称,即使没有它,飞行路线也会出现问题)

我认为,如果仅从实体创建架构,它将毫无问题地工作,但是我也在我们的开发环境中使用flyway,所以我想以相同的方式创建所有对象。

感谢您的帮助。我已经读了很多文章,但是在上网搜索了许多小时之后,我不知道如何解决这个问题。这听起来像是一个普遍的问题,但是互联网表明不是,或者我找不到它。

感谢帮助!

0 个答案:

没有答案