LINUX.ORG.RU
решено ФорумAdmin

Запуск скриптов в docker контейнере через ansible

 , , ,


1

2

Есть необходимость запускать тестовые скрипты. На серваке установил docker и ansible. Цель - запускать через Jenkins на этом серваке контейнеры и в одном из них скрипты, но я пока остановился на схеме без Jenkins, потому что уже есть некоторые вопросы. Написал playbook, который запускает три контейнера - selenium, chromedriver (безголовый браузер) и nightwatch (node.js и, если это важно, он является ENTRYPOINT). Контейнеры запускаются, но команда (command) внутри nightwatch не выполняется/не запускается даже. Вот playbook:

- name: Docker-compose
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:

    - name: Start selenium hub
      docker_container:
        name: hub
        image: localhost/tests/selenium:latest
        state: started
        restart: yes
        ports:
          - "4444:4444"

    - name: Start chromedriver
      docker_container:
        name: chromedriver
        image: localhost/tests/chromedriver:latest
        state: started
        restart: yes
        links:
          - "hub:hub"
        env:
            VNC_ENABLED: true
            EXPOSE_X11: true
        ports:
          - "5900:5900"

    - name: Start nightwatch
      docker_container:
        name: nightwatch
        image: localhost/tests/nightwatch:latest
#        init: yes
        state: started
        env:
            WAIT_FOR_HOSTS: chromedriver:4444
        volumes: ./test:/home/node
        command: nightwatch --test run/test-google.js
В папке test (которая становится общей для ОС и контейнера) есть папка run, где и лежат скрипты. Запускал playbook с ключами -vvv, но никаких явных ошибок, говорящих что-либо о запуске команды в контейнере не видно. Вот файл nightwatch.json:
{
  "globals_path": "globals.js",
  "output_folder": "reports",
  "src_folders": ["run"],
  "test_settings": {
    "default": {
      "selenium_host"  : "chromedriver",
      "screenshots": {
        "enabled": true,
        "on_failure": true,
        "on_error" : false,
        "path": "screenshots"
      },

      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true,
        "acceptSslCerts": true,
        "cssSelectorsEnabled": true
      }
    },
    "google" : {
      "launch_url" : "http://www.google.ru",
      "filter" : "*-google.js"
    }
  }
}
Есть ли те, кто может помочь или направить на путь истинный?



Последнее исправление: iOlegKV (всего исправлений: 1)

Ответ на: комментарий от CaHbl4

Waiting for chromedriver:4444 to become available ... timeout nc: bad address 'chromedriver' судя по всему не дожидается безголового браузера хром...

iOlegKV
() автор топика
Ответ на: комментарий от iOlegKV

ну вообще судя по конфигу, порт 4444 используется в контейнере hub, а в chromedriver - 5900

Почему ожидется chromedriver:4444 ?

CaHbl4
()

Для начала протестировал бы запустить все три контейнера руками и посмотреть работает ли оно как надо, потом уже переноси в compose или ansible.

stormblastt ★★★
()
Ответ на: комментарий от CaHbl4

Предполагаю, что для запуска теста (тестится сайт google) необходим «безголовый» chrome, который запускается в контейнере «chromedriver» на 4444 порту и контейнер «nightwatch» ждет chromedriver:4444, но не понятно почему. Когда я делаю аналогичную задачу по средствам стандартного docker-compose:

docker-compose -f docker-compose.yml run --rm nightwatch --test run/test-google.js
то все отлично запускается и тесты прогоняются...Но стоит перенести все на ansible, то уже неудача....

iOlegKV
() автор топика
Ответ на: комментарий от stormblastt

запуская через стандартный dpcker-compose:

docker-compose -f docker-compose.yml run --rm nightwatch --test run/test-google.js
контейнеры стартуют и тесты прогоняются....но через playbook уже есть проблема(

iOlegKV
() автор топика

Решено! 3-ий контейнер с Nightwatch надо было залинковать (links) с hub и chromedriver.

iOlegKV
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.