gpt4 book ai didi

java - 如何使用自己的运行者在 gitlab 工作中将 Postgres 作为服务运行?

转载 作者:行者123 更新时间:2023-11-29 12:51:01 25 4
gpt4 key购买 nike

我想配置 gitlab 管道以使用 Maven 针对 Postgres 数据库运行我的集成测试。我试着按照这个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 数据库执行我的测试吗?

最佳答案

您在 docker 执行器和 Kubernetes 执行器上处理网络的方式有所不同。

docker 执行器的工作方式与 docker-compose 非常相似,它可以在同一网络中启动所有容器。 每个容器获得一个 IP 并创建一个 DNS:如果您的服务名为 postgres,命令 nc postgres 将解析 postgres 容器 IP 并联系它(例如 172.17.0.15:5432)。

kubernetes 执行器将创建一个 pod runner。您的所有容器都将在同一个 pod 中启动,只有一个 IP 地址。 同一 pod 中容器之间的网络通过联系 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

关于java - 如何使用自己的运行者在 gitlab 工作中将 Postgres 作为服务运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54111821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com