无法连接到 Gitlab CI 中的 postgres

Mar*_*ado 5 postgresql gitlab docker gitlab-ci

我正在尝试使用 GitLab CI PostgreSQL 进行集成测试,但它不起作用。

\n\n

这是该阶段的代码:

\n\n
integration_test:\n  stage: test\n  tags:\n    - custom_tag\n  services: \n    - postgres\n  variables: \n    POSTGRES_DB: test\n    POSTGRES_HOST: postgres\n    POSTGRES_USER: postgres\n    POSTGRES_PASSWORD: postgres\n    POSTGRES_HOST_AUTH_METHOD: trust\n  script:\n    - docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD} ${DOCKER_REGISTRY}\n    - docker pull ${DOCKER_IMAGE_CI}\n    - export PGPASSWORD=${POSTGRES_PASSWORD}\n    - docker run --rm postgres psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT \'OK\' AS status;" \n
Run Code Online (Sandbox Code Playgroud)\n\n

它返回这样的错误:

\n\n
\n

psql:错误:无法连接到服务器:无法将主机名“postgres”转换为地址:名称或服务未知\n有人可以帮助我吗?

\n
\n

mak*_*aki 0

您的管道看起来像是使用 shell 执行器和 gitlab 服务。

命令docker run --rm postgres <docker command>不会自动连接到 postgres 网络。您可以尝试运行您的 docker 映像--link postgres,更多详细信息请参见此处。请注意,该链接是旧功能,将来可能会被删除。

就我个人而言,我会尝试使用 docker 镜像运行我的管道作业。如果您的图像不公开可见,那么您可以使用以下方法绕过它DOCKER_AUTH_CONFIG

如果您使用带有密码保护图像的docker runner ,那么 yaml 将如下所示:

integration_test:
  image: ${DOCKER_IMAGE_CI}
  stage: test
  tags:
    - custom_tag
  services: 
    - postgres
  variables: 
    POSTGRES_DB: test
    POSTGRES_HOST: postgres
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: postgres
    POSTGRES_HOST_AUTH_METHOD: trust
  script:
    - PGPASSWORD=${POSTGRES_PASSWORD} psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT 'OK' AS status;" 
Run Code Online (Sandbox Code Playgroud)

DOCKER_AUTH_CONFIG环境变量如下(gitlab docs):

{
    "auths": {
        "${DOCKER_REGISTRY}": {
            "auth": "(Base64 content from ${DOCKER_USER}:${DOCKER_PASSWORD})"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要生成 base64 身份验证,您可以使用echo -n "${DOCKER_USER}:${DOCKER_PASSWORD}" | base64