Я пытаюсь добавить тесты API в конвейер gitlab-cicd проекта веб-сервиса.Чтобы запустить тесты API, я добавил этап конвейера, на котором создается и публикуется образ веб-сервиса Docker, и я собираю и запускаю контейнер на каждом этапе тестирования.
Когда контейнер Docker запущен, конвейер запускает API-тесты, реализованные с помощью frisby, которые указывают на имя хоста, которое я считаю хостом работающего контейнера.
В этом и заключается проблема: сбой соединения.
В рамках тестов я отправляю запросы тому, что я считаю хостом службы, который, следуя разделу документации gitlab о том, какслужбы доступа будут выглядеть примерно так:
http://registry.gitlab.com__somegroup__someproject__somebranch:8080
К сожалению, запросы, отправленные на этот URL, не выполняются.
Кто-нибудь знаеткак заставить API-тесты, запущенные в pipelien, подключаться к сервисам, запускаемым в док-контейнерах?
Вот содержимое моего .gitlab-ci.yml
:
# as see on:
# https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
image: docker:stable
stages:
- build
- test
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
services:
- docker:dind
before_script:
- docker info
build:
stage: build
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --pull -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
.tests:
stage: test
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $CONTAINER_TEST_IMAGE
- docker run -d --name foo -p 80:80 $CONTAINER_TEST_IMAGE
- echo "Sleeping for 10 seconds..."
- sleep 10
- echo "Docker started."
after_script:
- docker stop foo
- echo "Docker stopped."
test foo:
extends: .tests
script:
- docker container ls
- apk add --update nodejs nodejs-npm
- cd tests
- npm install frisby jest
- npm test
- echo "Foo"
Вот результат выполнения конвейера gitlab:
$ npm test
> foo@1.0.0 test /builds/somegroup/someproject/tests
> jest
FAIL ./test.js
✕ should be a layers object (185ms)
✕ should be a workspace object (93ms)
● should be a layers object
FetchError: request to http://registry.gitlab.com__somegroup__someproject__somebranch:8080/ failed, reason: getaddrinfo ENOTFOUND registry.gitlab.com__somegroup__someproject__somebranch registry.gitlab.com__somegroup__someproject__somebranch:8080
at ClientRequest.<anonymous> (node_modules/node-fetch/lib/index.js:1444:11)
● should be a workspace object
FetchError: request to http://registry.gitlab.com__somegroup__someproject__somebranch:8080/ failed, reason: getaddrinfo ENOTFOUND registry.gitlab.com__somegroup__someproject__somebranch registry.gitlab.com__somegroup__someproject__somebranch:8080
at ClientRequest.<anonymous> (node_modules/node-fetch/lib/index.js:1444:11)
Test Suites: 1 failed, 1 total
Tests: 2 failed, 2 total
Snapshots: 0 total
Time: 5.393s
Ran all test suites.
npm ERR! Test failed. See above for more details.
Running after script...