代码之家  ›  专栏  ›  技术社区  ›  Noah Martin

如何使用自己的runner在gitlab作业中将Postgres作为服务运行?

  •  1
  • Noah Martin  · 技术社区  · 5 年前

    我想配置gitlab管道,以便使用Maven对Postgres DB运行集成测试。我试着跟着这个 documentation

    我的 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执行测试?
    1 回复  |  直到 5 年前
        1
  •  4
  •   hugoShaka    5 年前

    在docker executor和Kubernetes executor上处理网络的方式有所不同。

    docker-compose 在同一网络中升级所有容器。 每个容器获得一个IP,并创建一个DNS :如果您的服务已命名 postgres 命令 nc postgres 将解析postgres容器IP并与之联系( 172.17.0.15:5432 例如)。

    kubernetes执行者将创建一个pod runner。您的所有容器都将在同一个pod中启动,并且只有一个IP地址。 同一吊舱内集装箱之间的网络通过联系 127.0.0.1 . 如果您想联系postgres容器,您可能需要联系 127.0.0.1:5432 . 所以如果你使用 127.0.0.1 而不是 博士后

    为了让您的管道在两个执行器上工作,您可以:

    • 检测您正在使用哪种跑步者标记 $CI_RUNNER_TAGS
    • 定义自定义变量 $POSTGRES_URL 在你所有的遗嘱执行人身上
    • 设法解决 博士后 然后回到127.0.0.1