Как подключиться к Docker-контейнеру, запущенному на стадии конвейера? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь добавить тесты 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...
...