Bitbucket pipelines/Docker :连接被拒绝



我正在尝试配置位桶 CI 管道来运行测试。去除细节,我有一个make文件,如下所示,用于运行某种形式的集成测试。

test-e2e:
docker-compose -f ${DOCKER_COMPOSE_FILE} up -d ${APP_NAME} 
godog
docker-compose -f ${DOCKER_COMPOSE_FILE} down

Docker compose 是一个公开端口的单个 Web 服务器。

管道如下所示:

- step: &integration-testing 
name: Run integration tests script: # do this to make go module work with private repo 
- apk add libc-dev py-pip python-dev libffi-dev openssl-dev gcc libc-dev make bash 
- pip install docker-compose - git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/" 
- go get github.com/onsi/ginkgo/ginkgo 
- go get github.com/onsi/gomega/... 
- go get github.com/DATA-DOG/godog/cmd/godog 
- make build-only && make test-e2e 

我面临着两个单独的问题,因为我都无法找到解决方案。

  1. 运行测试时,连接不断被拒绝。

为了详细说明上面,docker 组合会打开一个具有正确主机:端口映射的服务器("127.0.0.1:10077:10077"(。命令godog旨在通过查询服务器来运行测试。然而,这总是以拒绝连接结束。这个链接有一个 可能的解决方案 ,所以我正在探索。

  1. 管道几乎总是在容器启动之前运行命令。我尝试通过将调用更改为来解决此问题。

    test-e2e:
    docker-compose -f ${DOCKER_COMPOSE_FILE} up -d ${APP_NAME} && sleep 10 && docker exec -i oracle-go godog && docker-compose -f ${DOCKER_COMPOSE_FILE} down
    

然而,容器总是在睡眠后(几乎是瞬间(被提起。

Example:
Creating oracle-go ... 
Sleep 10
docker ps CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
docker exec -i oracle-go godog
Creating oracle-go ... done
Error response from daemon: Container 7bab5322203756b972e7f0a3c6e5827413279914a68c705221b8af7daadc1149 is not running

如果有解决方法,请告诉我。

如果我正确理解了您的问题,您希望在运行测试之前等待服务器启动。

您应该使用wait-for-it.sh(或替代方法(,而不是手动sleeping。有关详细信息,请参阅相关的 Docker 文档。

例如:

test-e2e:
bash wait-for-it.sh <HOST>:<PORT> -- docker-compose -f ${DOCKER_COMPOSE_FILE} up -d ${APP_NAME} && docker exec -i oracle-go godog && docker-compose -f ${DOCKER_COMPOSE_FILE} down

<HOST><PORT>分别更改为服务的主机名和端口。或者,您可以在 Docker Composecommand等中使用wait-for-it.sh

最新更新