Bitbucket pipelines/Docker:连接被拒绝

Bitbucket pipelines/Docker : Connection refused

我正在尝试将 bitbucket CI 管道配置为 运行 tests.Stripping 详细信息 我有一个 make 文件,如下所示 运行 某种形式集成测试。

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

Docker compose 是一个暴露端口的网络服务器。

管道如下所示:

     - 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 compose 会启动一个具有适当 host:port 映射(“127.0.0.1:10077:10077”)的服务器。命令 godog 旨在通过查询服务器来 运行 测试。然而,这总是以连接被拒绝结束。This link 有一个可能的解决方案,所以我正在探索它。

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

     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 (or an alternative). See the relevant Docker docs 来获取更多信息,而不是手动 sleeping。

例如:

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 Compose command 等中使用 wait-for-it.sh