我正在尝试配置位桶 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
我面临着两个单独的问题,因为我都无法找到解决方案。
- 运行测试时,连接不断被拒绝。
为了详细说明上面,docker 组合会打开一个具有正确主机:端口映射的服务器("127.0.0.1:10077:10077"(。命令godog旨在通过查询服务器来运行测试。然而,这总是以拒绝连接结束。这个链接有一个 可能的解决方案 ,所以我正在探索。
管道几乎总是在容器启动之前运行命令。我尝试通过将调用更改为来解决此问题。
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
(或替代方法(,而不是手动sleep
ing。有关详细信息,请参阅相关的 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
。