如何使用多个Docker设置Gitlab CI E2E测试
我对使用Gitlab CI的自动化测试有点迷茫。我希望我能解释我的问题,以便有人能帮助我。我会先解释一下情况,然后再问一个问题(比听起来难) 处境 建筑学如何使用多个Docker设置Gitlab CI E2E测试,docker,docker-compose,continuous-integration,gitlab,Docker,Docker Compose,Continuous Integration,Gitlab,我对使用Gitlab CI的自动化测试有点迷茫。我希望我能解释我的问题,以便有人能帮助我。我会先解释一下情况,然后再问一个问题(比听起来难) 处境 建筑学 使用Jest单元测试和Cypress e2e测试对前端进行反应 Django API服务器1,包括Postgres数据库和测试 Django API服务器2和MongoDB数据库(与其他API通信 Gitlab 对于这两个API,有一个Docker和一个Docker compose文件。它们工作正常,设置正确 我们将GitLab用于CI/CD
Docker
和一个Docker compose
文件。它们工作正常,设置正确
我们将GitLab用于CI/CD,按照此顺序,我们有以下几个阶段:
- 我可以使用构建阶段中构建的docker进行e2e测试吗?有人能给我一个如何实现的示例吗?(通过将构建docker容器作为服务运行?)
- 我是否需要一个Docker compose文件,包括所有Docker和数据库
- 我甚至需要一个
dind
这篇文章可能会有所启发。 基本上,您制作了两个docker Composer,一个用于Cypress测试,另一个用于待测试的项目。这解决了图像能够访问节点和docker的问题
build-api:
image: docker:19
stage: build
services:
- docker:19-dind
script:
cd api
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker pull $IMAGE_TAG_API:latest || true
docker build -f ./Dockerfile --cache-from $IMAGE_TAG_API:latest --tag $IMAGE_TAG_API:$CI_COMMIT_SHA .
docker push $IMAGE_TAG_API:$CI_COMMIT_SHA
test-api:
image: docker:19
stage: test
services:
- postgres:12.2-alpine
- docker:19-dind
variables:
DB_NAME: project_ci_test
POSTGRES_HOST_AUTH_METHOD: trust
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $IMAGE_TAG_API:$CI_COMMIT_SHA
- docker run $IMAGE_TAG_API:$CI_COMMIT_SHA sh -c "python manage.py test"
after_script:
- echo "Pytest tests complete"
coverage: "/TOTAL.+ ([0-9]{1,3}%)/"
release-api-staging:
image: docker:19
stage: release
services:
- docker:19-dind
only:
refs: [ master ]
changes: [ ".gitlab-ci.yml", "api/**/*" ]
environment:
name: staging
script:
- docker pull $IMAGE_TAG_API:$CI_COMMIT_SHA
- docker tag $IMAGE_TAG_API:$CI_COMMIT_SHA $IMAGE_TAG_API:latest
- docker push $IMAGE_TAG_API:latest