我正在尝试使用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:错误:无法连接到服务器:无法将主机名“ postgres”转换为地址:名称或服务未知 有人可以帮助我吗?
答案 0 :(得分:0)
您的管道看起来像它在gitlab服务中使用Shell executor。
命令docker run --rm postgres <docker command>
不会自动连接到postgres网络。您可以尝试使用--link postgres
和更多详细信息here运行docker映像。请注意,链接是旧功能,将来可能会删除。
我个人会尝试使用docker image运行管道作业。如果您的图片未公开显示,则可以使用DOCKER_AUTH_CONFIG
如果您将dockerRunner与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})"
}
}
}
并使用echo -n "${DOCKER_USER}:${DOCKER_PASSWORD}" | base64
答案 1 :(得分:0)
也许最好看一下Docker化测试功能。这种方法还可以通过Docker桥接器更好地控制网络。 这样,您的配置可能如下所示:
.gitlab-ci.yml
:
stages:
- test
before_script:
- docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD} ${DOCKER_REGISTRY}
integration_test:
stage: test
script:
- docker-compose build
- docker-compose up
docker-compose.yml
:
version: '3'
networks:
database:
services:
postgres-db:
image: ${DOCKER_IMAGE_CI}
networks:
- database
container_name: postgres
test-container:
build:
context: .
dockerfile: Dockerfile
networks:
- database
container_name: testcon
Dockerfile
:
FROM postgres
ENV POSTGRES_DB=test \
POSTGRES_HOST=postgres \
POSTGRES_USER=postgres \
POSTGRES_PASSWORD=postgres \
POSTGRES_HOST_AUTH_METHOD=trust
CMD psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c "SELECT 'OK' AS status;"