Связаться по:
vkarabedyants Telegram Viber

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Playbook Ansible для Selenium Server

Готовим плейбук

Для работы Selenium Server понадобится Java, драйверы и браузеры. Мы будем устанавливать драйверы и браузеры Firefox и Chrome как наиболее популярные. Для тестирования основных функций этого более чем достаточно. Основы работы в Ansible можно найти на сайте проекта. В плейбуке оставлены основные функции, достаточные для работы. При необходимости можно расширить.

Для удобства последующего обновления задаем переменные. Пока будем запускать две копии Selenium Server на портах, указанных в selenium.ports. При желании можно расширить на любое количество, просто добавив нужные номера.

$ nano group_vars/selenium/vars.yml
chromedriver: 2.31
geckodriver: v0.18.0
selenium:
ports:
- '4444'
- '4445'
version: 3.5.3

Указываем роли.

selenium.yml
- hosts: selenium
become: True
become_method: sudo
roles:
- java
- selenium

Для работы будем использовать официальную версию Java от Oracle, для установки которой необходимо подключить репозиторий.

roles/java/tasks/main.yml
- name: add repo for java 8
apt_repository:
repo: 'ppa:webupd8team/java'

При установке пакета задаются вопросы, поэтому нужно сконфигурировать ответ.

- name: configure java 8 installation
debconf:
name: oracle-java8-installer
question: shared/accepted-oracle-license-v1-1
value: 'true'
vtype: select

Ставим пакеты. name:

name: install java 8
apt:
name: '{{item}}'
update_cache: True
cache_valid_time: 3600
with_items:
- oracle-java8-installer
- oracle-java8-set-default

Роль простая. При необходимости ее можно использовать для развертывания Java на других серверах.

Теперь Selenium. Для работы понадобятся веб-браузеры (можно поставить один из них), драйверы и собственно Selenium. Версию самого Selenium, драйвера и веб-браузера не обязательно брать последнюю. Проекты развиваются, и постоянно происходят разные нестыковки. Хотя в последнем релизе селениума обычно устраняют все известные проблемы.

$ nano roles/selenium/tasks/main.yml

Добавляем ключ и репозиторий Google Chrome.

- name: Add Google signing key
apt_key:
url: 'https://dl-ssl.google.com/linux/linux_signing_key.pub'
state: present
- name: Add Chrome repo
apt_repository:
repo: 'deb http://dl.google.com/linux/chrome/deb/ stable main'
filename: 'google-chrome'

Все остальные зависимости уже есть в репозитории. Запуск Selenium Server на сервере без графической оболочки требует framebuffer сервера – xvfb.

- name: Install browser
apt:
pkg: "{{ item }}"
state: present
update_cache: yes
cache_valid_time: 3600
with_items:
- xvfb
- firefox
- google-chrome-stable

Создадим каталог для файлов Selenium. Я предпочитаю все класть в /opt. name:

- name: Create selenium directory
file:
path: /opt/selenium
state: directory

Скачиваем сервер selenium-server-standalone и копируем на свое место.

- name: Download Selenium
get_url:
url: "http://selenium-release.storage.googleapis.com/ ↵
{{ selenium.version | regex_replace('\\.[0-9]+$', ↵
'') }}/selenium-server-standalone-{{ ↵
selenium.version }}.jar"
dest: "/opt/selenium/selenium-server-standalone.jar"

Драйверы должны быть видны в переменой PATH. Поэтому каталог для них другой. Можно положить в тот же каталог, что и selenium-server, и изменить настройки, но так более универсально.

- name: Download and untar geckodriver tarball
unarchive:
src: "https://github.com/mozilla/geckodriver/releases/ ↵
download/{{ geckodriver }}/ ↵
geckodriver-{{ geckodriver }}-linux64.tar.gz"
dest: "/usr/bin"
copy: no
creates: "/usr/bin/geckodriver"
- name: download and unzip chromedriver tarball
unarchive:
src: "http://chromedriver.storage.googleapis.com/ ↵
{{ chromedriver }}/chromedriver_linux64.zip"
dest: "/usr/bin"
copy: no
creates: "/usr/bin/chromedriver"

Теперь осталось все это запустить. Так как планируется использовать несколько копий Selenium Server ,то для запуска используем шаблон.

- name: Create selenium systemd files
template:
src: selenium.service.j2
dest: "/etc/systemd/system/selenium-{{ item }}.service"
with_items: '{{ selenium.ports }}'

В результате работы этой части в каталоге /etc/systemd/ system будет создано несколько файлов с именем вроде selenium-4444.service. Включаем автозагрузку сервисов при перезагрузке ОС.

- name: Enable selenium. service
systemd:
name: "selenium-{{ item }}.service"
enabled: true
daemon_reload: yes
state: restarted
with_items: '{{ selenium.ports }}'

Команда для запуска сервера Selenium такая:

xvfb-run -a -s "-screen 0 1920x1080x24" /usr/bin/java ↵
-jar /opt/selenium/selenium-server-standalone.jar ↵
-port 4444

По умолчанию используется порт 4444, остальным копиям можно задавать любые удобные. Осталось написать шаблон для запуска сервиса через systemd.

Сам шаблон с именем selenium.service.j2 копируем в каталог roles/selenium/templates.

[Unit]
Description=Selenuim
After=syslog.target
[Service]
User=root
Environment=DBUS_SESSION_BUS_ADDRESS=/dev/null
ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1920x1080x24" ↵
/usr/bin/java -jar /opt/selenium/ ↵
selenium-server-standalone.jar -port {{ item }} ↵
-log /var/log/selenium-{{ item }}.log
SuccessExitStatus=0
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target

Два момента. Запуск здесь происходит от root, это не очень хорошо. Лучше создать отдельную учетную запись, дав права на доступ в рабочие каталоги. Журналы при большом количестве очень быстро разрастаются и забирают много места. Если они не нужны, то после отладки их лучше отключить и настроить ротацию.

После запуска плейбука netstat покажет, что слушаются нужные порты. Можем подключиться к ним в браузере http:// server_ip:4444/wd/hub (см. рис. 1) и попробовать создать сессию (см. рис. 2).Работающий Selenium Server Если все нормально, то задача, считаем, выполнена. Так как Selenium никак не авторизируются, то, если используется сервер, находящийся за пределами внутренней сети, порты лучше прикрыть при помощи iptables, разрешив доступ только с определенных IP. Правила можно сразу генерировать плейбуком.

Создаем сессию ansible
Наша компания предоставляет услуги Devops администратора, обращайтесь [email protected] и мы поможем автоматизировать процессы.

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.