[英]How to setup Gitlab CI E2E tests using Multiple dockers
我對使用 Gitlab CI 的自動化測試有點迷失了。 我希望我能解釋我的問題,以便有人可以幫助我。 我會先試着解釋一下情況,然后我會試着問一個問題(這比聽起來更難)
對於 2 個 API,有一個Docker
和一個docker-compose
文件。 這些工作正常並且設置正確。
我們將 GitLab 用於 CI/CD,我們按此順序有以下階段:
我想設置 GitLab CI 以便它運行柏樹測試。 但為此,需要所有構建 docker。 目前,在執行端到端測試時,我無法同時使用所有 docker。
我真的不明白我將如何實現這一目標。
dind
嗎?我希望有人能給我一些關於如何實現這一目標的建議。 一個例子會更好,但我不知道是否有人願意這樣做。
感謝您花時間閱讀!
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
這篇文章可能會有所啟發。 https://jessie.codes/article/running-cypress-gitlab-ci/基本上,您制作了兩個 docker 作曲家,一個用於 Cypress 測試,一個用於您要測試的項目。 這解決了圖像能夠訪問節點和 docker 的問題。
答案有點晚了,但我還是會嘗試簡要解釋一下這種方法。
當 e2e 測試全棧應用程序時,您必須:
如您所述,您希望在管道中臨時啟動環境。 應采取以下步驟:
docker-compose.yml
服務;首先,您必須在 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-compose.yml
服務將所有后端 docker 化並在私有注冊表上發布圖像后,您可以開始使用 GitLab 作業來模仿您的docker-compose.yml
。 一個基本的例子:
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.com/[MY_GROUP]/my-docker-image
alias: server
script:
- curl http://server:3000 # expecting server exposes on port 3000, this should work
- curl http://mongo:270117 # should work
- curl http://postgress:5432 # should work!
現在一切都在 GitLab 中的單個作業中運行,您可以簡單地以分離模式啟動前端並運行 cypress 來測試它。 例子:
script:
- npm run start & # start in detached mode
- wait-on http://localhost:8080 # see: https://www.npmjs.com/package/wait-on
- cypress run # make sure cypress is available as well
您的docker-compose.yml
並不意味着在管道中運行。 使用GitLab services來模仿它。 Dockerize 所有后端並將它們存儲在GitLab 的私有注冊表中。 啟動管道中的所有服務並運行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.