1

У меня есть настройка докеры, которая позволяет запускать тесты на кодирование в контейнерах Docker, включая концентратор Selenium & Хром-узел. Тесты все нормально работают на моей локальной (Mac) dev-машине, однако, когда я запускаю их на своем (Ubuntu) Gitlab runner, тесты терпят неудачу, так как браузер селинового хромового узла сообщает ERR_NAME_NOT_RESOLVED, по какой-то причине, и я не могу выясните почему.Тестер кода кода (Selenium on Docker) не работает как неспособный видеть другие контейнеры (работает на моем dev-машине, хотя ?!)

Мой докер композитор файл ...

# docker-compose.yml 
version: '2' 

services: 

    composer: 
    image:  registry.gitlab.com/project/api-docker-php:prod 
    entrypoint: 
    - php 
    - -d 
    - memory_limit=-1 
    - /usr/local/bin/composer 
    volumes: 
     - ~/.composer:/.composer 
     - .:/var/www/html 

    php: 
    image: registry.gitlab.com/project/api-docker-php:prod 
    depends_on: 
     - mongo 

    nginx: 
    image: cubicmushroom/nginx-letsencrypt 
    ports: 
     - "80:80" 
     - "443:443" 

    mongo: 
    image: mongo:3.2 
    volumes: 
     - project_api_mongodb_data:/data/db 


volumes: 
    project_api_mongodb_data: ~ 

И мой файл DEV переопределение ...

# docker-compose.override.yml 
version: '2' 

services: 

    certs: 
    image: nginx 
    command: > 
     openssl req -new -x509 -days 365 -nodes -newkey rsa:2048 -sha256 
      -subj "/C=UK/ST=Greater Manchester/L=Manchester/O=Cubic Mushroom Ltd./OU=HQ/CN=*.project.dev" 
      -keyout /work/privkey.pem -out /work/fullchain.pem 
    volumes: 
     - project-dev-certs:/work 

    php: 
    image: registry.gitlab.com/project/api-docker-php:dev 
    environment: 
     PHP_IDE_CONFIG: "serverName=project.dev" 
    volumes: 
     - .:/var/www/html 

    nginx: 
    volumes_from: 
     - php 
    volumes: 
     - project-dev-certs:/etc/letsencrypt/live/project.dev 
     - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf 
     - ./conf/nginx/conf.d/default.dev.conf:/etc/nginx/conf.d/default.conf 
     - ./conf/nginx/conf.d/upstream.conf:/etc/nginx/conf.d/upstream.conf 

    mongo: 
    volumes: 
     - ./data:/data/db 

    selenium_hub: 
    image: selenium/hub 
    ports: 
     - "4444:4444" 

    selenium_node_chrome: 
    image: selenium/node-chrome-debug 
    expose: 
     - "5555" 
    ports: 
     - "5900:5900" 
    environment: 
     - HUB_PORT_4444_TCP_ADDR=hub 
     - HUB_PORT_4444_TCP_PORT=4444 
     - no_proxy=localhost 
    volumes: 
     - "/dev/shm:/dev/shm" 
    links: 
     - "selenium_hub:hub" 
     - "nginx:api.project.local" 

    selenium_node_firefox: 
    image: selenium/node-firefox-debug 
    ports: 
     - "5901:5900" 
    environment: 
     - HUB_PORT_4444_TCP_ADDR=hub 
     - HUB_PORT_4444_TCP_PORT=4444 
     - no_proxy=localhost 
    links: 
     - "selenium_hub:hub" 
     - "nginx:api.project.local" 

volumes: 
    project-dev-certs: ~ 

Вот мой codeception acceptance.suite.yml, если это помогает тоже ...

# acceptance.suite.yml 
class_name: AcceptanceDude 
modules: 
    enabled: 
    - MongoDb 
    - WebDriver: 
     # Uses link alias as defined on selenium_node_chrome & selenium_node_firefox containers in docker compose 
     # override files 
     url:  'http://api.project.local/app_test.php/' 
     browser: chrome 
     host:  selenium_hub 
     port:  4444 
    - \Project\Common\Test\Helper\Fixtures: 
     depends: Symfony 
    - \Project\SymfonyBundle\CalculationBundle\Test\Helper\CalculationRecords: 
     depends: MongoDb 
    - \Project\SymfonyBundle\ModuleBundle\Test\Helper\QuestionRecords: 
     depends: MongoDb 
    - \Project\SymfonyBundle\UserBundle\Test\Helper\UserAuthentication: 
     depends: Symfony 
     web_driver: WebDriver 
    - \Project\Tests\Helper\WebDriverSymfonyCompanion: 
     depends: 
      - Symfony 
      - WebDriver 

И наконец, первые несколько строк теста, который терпит неудачу ...

// codeceptionTestCept.php 
<?php 
declare(strict_types = 1); 

use Codeception\Scenario; 
use Project\SymfonyBundle\ManagementBundle\Test\AcceptanceDude; 
use Project\SymfonyBundle\UserBundle\DataFixtures\MongoDB\ProjectAdminUser; 

/** @var Scenario $scenario */ 

$I = new AcceptanceDude($scenario); 
$I->wantTo('add a calculation to a module'); 

$I->loadFixtures(['@ManagementBundle:LoadModules.php', '@UserBundle:ProjectAdminUser.php']); 
$I->amLoggedInAs(ProjectAdminUser::EMAIL, ProjectAdminUser::PASSWORD); 
$I->amOnRoute('project_admin_get_module', ['slug' => 'community']); 
$I->seeCurrentRouteIs('project_admin_get_module', ['slug' => 'community']); 

Я не могу понять, почему Docker ведет себя по-разному в двух разных средах, поскольку я думал, что он должен был изолировать все вещи от внешнего мира.

Любая помощь была бы принята с благодарностью. Заранее спасибо.

Для справки, вот мои версии Докера ...

# Local dev machine… 
Docker version 1.12.3, build 6b644ec 
docker-compose version 1.8.1, build 878cff1 

# Gitlab runner… 
Docker version 1.12.3, build 6b644ec 
docker-compose version 1.8.1, build 878cff1 

ответ

0

Оказывается, мой Nginx контейнер зависит от моих Девых сертификатов SSL, которые я сгенерированные на моей машине Dev, но не на моем сервере CI ... поэтому останавливался сразу после запуска.

Неудивительно, что узел селена не мог его увидеть !!!

+0

Это было сложно устранить в IRC, но рад, что вы это узнали. – Bizmate

Смежные вопросы