Rob*_*per 6
答案有点晚了,但我仍然会尝试为其他有相同问题的开发人员简要解释该方法。我还创建了一个示例项目,在 GitLab 中包含 3 个微服务,其中服务器 A 运行端到端测试并依赖于服务器 B 和服务器 C。
当 e2e 测试全栈应用程序时,您必须:
模拟微服务的所有响应 针对已部署的环境进行测试; 或在管道中临时启动环境如您所述,您希望在管道中临时启动环境。应采取以下步骤:
在 GitLab 的私有注册表中将所有后端部署为 docker 镜像; 在管道中的一项工作中模仿您的docker-pose.yml
服务;
将这些点连接在一起。
在 GitLab 私有注册表中将后端部署为 docker 映像
首先,您必须在 GitLab 的私有注册表中发布您的 docker 镜像。您这样做是因为您现在可以在另一项工作中重复使用这些图像。对于这种方法,您需要docker:dind
. 发布到 gitlab 上的私有注册表的简单示例作业如下所示:
before_script:
- echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
publish:image:docker:
stage: publish
image: docker
services:
- name: docker:dind
alias: docker
variables:
CI_DOCKER_NAME: ${CI_REGISTRY_IMAGE}/my-docker-image
script:
- docker pull $CI_REGISTRY_IMAGE || true
- docker build --pull --cache-from $CI_REGISTRY_IMAGE --tag $CI_DOCKER_NAME --file Dockerfile .
- docker push $CI_DOCKER_NAME
only:
- master
要查看真实示例,我有一个公开的示例项目。
docker-pose.yml
在管道中的 1 个工作中模仿您的服务
将所有后端 docker 化并在私有注册表上发布图像后,您就可以开始docker-pose.yml
使用 GitLab 工作来模仿您的工作了。一个基本的例子:
test:e2e:
image: ubuntu:20.04
stage: test
services:
- name: postgres:12-alpine
alias: postgress
- name: mongo
alias: mongo
# my backend image
- name: registry.gitlab./[MY_GROUP]/my-docker-image
alias: server
script:
- curl server:3000 # expecting server exposes on port 3000, this should work
- curl mongo:270117 # should work
- curl postgress:5432 # should work!
运行测试
现在一切都在 GitLab 中的单个作业中运行,您可以简单地以分离模式启动前端并运行 cypress 来测试它。例子:
script:
- npm run start & # start in detached mode
- wait-on localhost:8080 # see: npmjs./package/wait-on
- cypress run # make sure cypress is available as well
结论
你docker-pose.yml
的意思不是在管道中运行。模仿它,而不是使用GitLab 服务。Dockerize 所有后端并将它们存储在GitLab 的私有注册表中。启动管道中的所有服务并运行测试。
更多推荐
多个,如何使用,测试,E2E,Gitlab
发布评论