Java 如何使用自己的runner在gitlab作业中将Postgres作为服务运行?
我想配置gitlab管道,以便使用Maven对Postgres DB运行集成测试。我试着遵循这一点,但后来我注意到这只适用于共享的gitlab runner,但我使用的是我自己的gitlab runner,它在Kubernetes中运行 MyJava 如何使用自己的runner在gitlab作业中将Postgres作为服务运行?,java,postgresql,maven,gitlab,gitlab-ci-runner,Java,Postgresql,Maven,Gitlab,Gitlab Ci Runner,我想配置gitlab管道,以便使用Maven对Postgres DB运行集成测试。我试着遵循这一点,但后来我注意到这只适用于共享的gitlab runner,但我使用的是我自己的gitlab runner,它在Kubernetes中运行 Mygitlab ci.yml: cache: key: "$CI_COMMIT_REF_NAME" untracked: true paths: - .m2/repository/ variables: MAVEN_CLI_OPTS: "
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执行我的测试?docker executor和Kubernetes executor处理网络的方式有所不同 docker executor的工作方式非常类似于在同一网络中添加所有容器的docker compose每个容器获得一个IP并创建一个DNS:如果您的服务名为
postgres
,则命令nc postgres
将解析postgres容器IP并与之联系(例如172.17.0.15:5432
)
kubernetes执行者将创建一个pod runner。您的所有容器都将在同一个pod中启动,并且只有一个IP地址通过联系127.0.0.1
在同一pod中的容器之间建立网络。如果您想联系postgres容器,您可能需要联系127.0.0.1:5432
。因此,如果您使用127.0.0.1
而不是postgres
,它应该可以工作
为了让您的管道在两个执行器上工作,您可以:
- 检测您正在使用哪种跑步者标签
$CI\u runner\u标签
- 在所有执行器上定义自定义变量
$POSTGRES\u URL
- 尝试解析
并返回到127.0.0.1postgres
127.0.0.1:5432
。谢谢你,特别是你的完美描述