我正在尝试使用 GitLab CI PostgreSQL 进行集成测试,但它不起作用。
这是舞台的代码:
integration_test:
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:
- docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD} ${DOCKER_REGISTRY}
- docker pull ${DOCKER_IMAGE_CI}
- export PGPASSWORD=${POSTGRES_PASSWORD}
- docker run --rm postgres psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT 'OK' AS status;"
它返回这样的错误:
psql: error: could not connect to server: could not translate host name "postgres" to address: Name or service not known Anybody can help me?
请您参考如下方法:
您的管道看起来像是将 shell 执行程序与 gitlab 服务一起使用。
命令 docker run --rm postgres <docker command>
不会自动连接到 postgres 网络。您可以尝试使用 --link postgres
运行您的 docker 镜像,更多详细信息 here 。请注意,链接是旧功能,将来可能会被删除。
我个人会尝试使用 docker 图像运行我的管道作业。如果您的图像不公开可见,那么您可以使用 DOCKER_AUTH_CONFIG
绕过它
如果您将 docker runner 与 password protected image 一起使用,那么 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;"
DOCKER_AUTH_CONFIG
环境变量如下(
gitlab docs ):
{
"auths": {
"${DOCKER_REGISTRY}": {
"auth": "(Base64 content from ${DOCKER_USER}:${DOCKER_PASSWORD})"
}
}
}
并生成 base64 身份验证,您可以使用
echo -n "${DOCKER_USER}:${DOCKER_PASSWORD}" | base64