【发布时间】:2019-09-21 07:25:33
【问题描述】:
我正在使用 otj-pg-embedded 针对嵌入式 postgres 数据库运行一些测试。虽然测试在本地运行良好,但在 Gitlab-CI 以非法状态异常运行时会失败。 Gitlab CI 构建它并运行不包含 otj-pg-embedded 的测试。
我已经注释掉了大部分测试类并将问题定位到:
public static SingleInstancePostgresRule pg = EmbeddedPostgresRules.singleInstance();
import com.goldfinger.models.AuditLog;
import com.opentable.db.postgres.embedded.FlywayPreparer;
import com.opentable.db.postgres.junit.EmbeddedPostgresRules;
import com.opentable.db.postgres.junit.PreparedDbRule;
import org.junit.*;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
public class SQLAuditRepositoryTest {
private static SQLAuditRepository sqlAuditRepository;
private static AuditLog auditLog_1;
private static AuditLog auditLog_2;
private static AuditLog auditLog_3;
private static List<AuditLog> auditLogList;
@ClassRule
public static SingleInstancePostgresRule pg = EmbeddedPostgresRules.singleInstance();
@Test
public void simpleTest() {
assert (2 == 2);
}
}
这是堆栈跟踪:
java.lang.IllegalStateException: Process [/tmp/embedded-pg/PG-06e3a92a2edb6ddd6dbdf5602d0252ca/bin/initdb, -A, trust, -U, postgres, -D, /tmp/epg6584640257265165384, -E, UTF-8] failed
at com.opentable.db.postgres.embedded.EmbeddedPostgres.system(EmbeddedPostgres.java:626)
at com.opentable.db.postgres.embedded.EmbeddedPostgres.initdb(EmbeddedPostgres.java:240)
...
... many lines here
...
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
这是 gitlab-ci.yml
image: java:latest
services:
- postgres:latest
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
package:
stage: build
script:
- ./gradlew assemble
test:
stage: test
script:
- ./gradlew check
artifacts:
reports:
junit: build/test-results/test/*.xml
任何帮助将不胜感激。
【问题讨论】:
-
除了重启电脑,我还没有弄清楚如何停止嵌入式 Postgress 在后台运行。它有助于解决这个问题。
-
我在 macOS 12.1 Monterey 上遇到了同样的问题,问题似乎是 postgres 的二进制文件引发了“分段错误”错误。里卡多的评论和这个讨论似乎有帮助:github.com/opentable/otj-pg-embedded/issues/…
标签: java postgresql gitlab-ci