我想配置gitlab管道以使用Maven针对Postgres DB运行集成测试。我尝试遵循此documentation,但之后我注意到这仅适用于共享的gitlab运行程序,但我使用的是在Kubernetes中运行的自己的gitlab运行程序。
我的gitlab-ci.yml
:
cache:
key: "$CI_COMMIT_REF_NAME"
untracked: true
paths:
- .m2/repository/
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml "
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository/"
POSTGRES_DB: postgres
POSTGRES_USER: runner
POSTGRES_PASSWORD: runner
stages:
- build
- verify
build:
image: maven:3.6.0-jdk-8
stage: build
script:
- "mvn $MAVEN_CLI_OPTS --quiet clean package -Dmaven.test.skip=true"
artifacts:
paths:
- "target/*"
test:
image: maven:3.6.0-jdk-8
services:
- postgres:latest
stage: verify
script:
- "mvn $MAVEN_CLI_OPTS --quiet -Dspring.profiles.active=dev clean test"
使用共享运行程序,此配置可以正常工作,但是我必须使用Kubernetes的运行程序。有什么方法可以在不使用共享运行器的情况下针对postgres DB执行测试吗?
答案 0 :(得分:2)
您在docker executor和Kubernetes executor上处理网络的方式有所不同。
泊坞窗执行器的工作就像docker-compose
一样,在同一网络中扩展所有容器。 每个容器获取一个IP并创建一个DNS :如果您的服务名为postgres
,则命令nc postgres
将解析postgres容器IP并与之联系(172.17.0.15:5432
例如)。
kubernetes执行器将创建一个pod赛跑者。您所有的容器都将在只有一个IP地址的同一容器中启动。 通过联系127.0.0.1
来完成同一容器中容器之间的网络。如果您想联系postgres容器,您可能会想联系127.0.0.1:5432
。因此,如果您使用127.0.0.1
而不是postgres
,它应该可以工作。
为了使您的管道同时在两个执行器上运行,您可以:
$CI_RUNNER_TAGS
$POSTGRES_URL
postgres
并退回到127.0.0.1