21. Переезд на собственную инфраструктуру Python - qa-guru/knowledge-base GitHub Wiki
В этом руководстве описано, как собрать собственный тестовый стенд, который используется для обучения в школе QA GURU. Для работы понадобится Docker, Selenoid, Jenkins, командная строка и любой редактор кода.
- Шаги для работы с ssh ключами
- Первичная настройка удалённого сервера
- Установка Java и переменной JAVA_HOME
- Установка Docker
- Создаём директории и yml файл
- Добавляем конфигурацию Jenkins и запускаем
- Добавляем плагин Allure Report
- Настройка Jenkins
- Создание образа с помощью Dockerfile и установка Python
- Создание виртуального окружения и активация его в Jenkins
- Добавляем Selenoid
- Работа с контейнерами и образами
Шаги для работы с ssh ключами (данные шаги не обязательны если это ваш личный сервер и работаете только вы с ним)
Нажать, чтобы раскрыть
- Необходимо проверить есть ли ssh-ключи в директории
.ssh
с помощью командыls -l ~/.ssh | grep id_rsa
.
- Если ssh-ключей нет, то их можно сгенерировать с помощью команды
ssh-keygen -t rsa -b 4096 -C 'ваш email'
(как примерssh-keygen -t rsa -b 4096 -C [email protected]
). После ввода команды и нажатия Enter, вам будет предложено ввести путь к файлу, куда сохранить ключ. По умолчанию это~/.ssh/id_rsa
. Нажмите Enter, чтобы сохранить ключ в этом месте. Далее вам будет предложено ввести пароль для ключа(тут необходимо вводить пароль если это секьюрные данные и где ключ будете не только вы использовать). Повторите ввод пароль((тут необходимо вводить пароль если это секьюрные данные и где ключ будете не только вы использовать)) и нажмите Enter. После этого ключ будет сгенерирован. Для всех шагов можно нажать просто Enter, чтобы использовать значения по умолчанию. После создания ключей их можно увидеть в папке~/.ssh
с помощью командыls -l ~/.ssh | grep id_rsa
.
- Необходимо проверить работает ли ssh-agent с помощью команды
eval $(ssh-agent -s)
. Если ssh-agent не работает, то его можно запустить с помощью командыssh-agent bash
.
Далее необходимо добавить ключи в ssh-agent с помощью команды ssh-add ~/.ssh/id_rsa
.
Первым делом необходимо изменить пароль сервера с помощью команды passwd
. Далее обновляем данные репозиториев. Вводим команду apt update && apt upgrade -y
.
Теперь установим утилиту Midnight Commander с помощью команды apt instal mc -y
. Запустить её можно с помощью команды mc
.
Далее проверяем какой интерпретатор команд используется с помощью команды echo $0
. Если используется интерпретатор sh
, то его можно поменять на bash
с помощью команды chsh -s /usr/bin/bash
.
Для работы Jenkins необходима Java. Установить её можно с помощью команды sudo apt-get install openjdk-21-jdk -y
. В данной команде будет установлена версия 21. Для проверки версии Java можно ввести команду java -version
.
Теперь необходимо добавить переменную JAVA_HOME
. Для начала проверяем если она уже установлена с помощью команды echo $JAVA_HOME
. Если переменной нет, то её можно добавить.
Проверяем, где находится бинарник Java. По умолчанию все бинарники находятся в папке /usr/lib/jvm/
. Проверить можно с помощью команды ls /usr/lib/jvm/
.
Как пример для Java 21 путь будет /usr/lib/jvm/java-21-openjdk-amd64/
. Добавить переменную нужно в etc/environment
. Для этого вводим nano /etc/environment
и добавляем строку JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64/"
. После этого сохраняем изменения(Ctrl+S, Ctrl+X), и в терминале вводим команду source /etc/environment
.
Проверяем что переменная добавлена с помощью команды echo $JAVA_HOME
.
Docker можно установить с помощью скрипта curl -sSL https://get.docker.com -o get-docker.sh
.
Если у вас не установлен curl
, то его можно установить с помощью команды apt install curl -y
.
Далее делаем файл исполняемым с помощью команды chmod +x get-docker.sh
. Запускаем скрипт с помощью команды ./get-docker.sh
.
После установки Docker проверяем что всё установилось, а именно вводим команду docker --version
и потом docker compose version
и в ответ должны получить версии установленных программ.
Теперь необходимо создать директории.
- Переходим в папку
opt
с помощью командыcd /opt
. - Создаём папку
testbed
с помощью командыmkdir testbed
. - Переходим в папку
testbed
с помощью командыcd testbed
. - Создаём папку
work
с помощью командыmkdir work
. - Создаём папку
image
с помощью командыmkdir image
. - Создаём папку
init
с помощью командыmkdir init
. - Переходим в папку
init
с помощью командыcd /init
. И создаём в ней папкуselenoid
с помощью командыmkdir selenoid
. - Возвращаемся в папку
testbed
с помощью командыcd /opt/testbed
илиcd ..
. - Создаём файл
docker-compose.yml
с помощью командыtouch docker-compose.yml
или же сразу открыть файл для редактированияnano docker-compose.yml
(после сохранения файл создастся автоматически).
Или создание папок можно сделать с помощью утилиты Midnight Commander, которую мы уже установили. Дерево директорий в итоге должно выглядеть следующим образом:
opt/
├─ testbed/
│ ├─ work/
│ ├─ image/
│ │ ├─ Dockerfile
│ ├─ docker-compose.yml
│ ├─ init/
│ │ ├─ selenoid/
В файлеdocker-compose.yml
прописываем конфигурацию Jenkins:
version: '3.4'
services:
jenkins:
user: root
restart: always
image: jenkins/jenkins:lts
# build:
# context: ./image
volumes:
- ${PWD}/work/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8888:8080
network_mode: bridge
environment:
- ALLURE_NO_ANALYTICS=1
Находясь в директории testbed
запускаем команду docker compose up -d
.
Если старт произошел успешно, то будет отображено следующее:
Далее необходимо ввести команду docker compose logs jenkins
. И После этого в терминале будет отображен пароль, который нужно скопировать.
После этого можно перейти в браузере по адресу http:/ip-address-вашего сервера:8888
и увидеть окно Jenkins. Где в поле Administrator password
вводим скопированный ранее пароль и нажимаем Continue
.
На следующем этапе можно выбрать установку плагинов по умолчанию или же установить их вручную. Для начала можно установить рекомендованные плагины. Для этого нажимаем Install suggested plugins
.
После установки плагинов будет отображено окно создания пользователя. Заполняем поля и нажимаем Save and Continue
.
В окне Instance Configuration
можно оставить всё по умолчанию и нажать Save and Finish
.
В окне Jenkins is ready
нажимаем Start using Jenkins
.
Для работы с Jenkins необходимо установить плагин Allure Report. Для этого переходим в Manage Jenkins
-> Manage Plugins
-> Available
и в поиске вводим Allure Report
. Устанавливаем плагин.
Если установка прошла успешно, то будет отображено следующее:
Повторяем действия для установки плагина Text File Operations
и Post build task
.
Для начала необходимо добавить переменную JAVA_HOME
. Для этого переходим в Manage Jenkins
-> Tools
-> JDK installations
и кликаем на кнопку Add JDK
.
В строку JAVA_HOME
добавляем переменную $JAVA_HOME
, а в строку Name
пишем jdk21
. После этого нажимаем Save
.
Чтобы добавить allurecommandline
переходим в Manage Jenkins
-> Tools
-> Allure Commandline installations
и кликаем на кнопку Add Allure Commandline installation
.
В поле Name
пишем allurecommandline
. После этого нажимаем Save
.
Создаём файл Dockerfile
в папке image
с помощью команды nano image/Dockerfile
. В файле прописываем следующее:
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get upgrade -y && apt-get install -y python3 python3-pip python3-venv && apt-get install -y rsync
RUN python3 -m venv /venv
RUN . /venv/bin/activate && pip install --upgrade pip && pip install pytest allure-pytest 'selene>=2.0.0rc9' 'python-dotenv==1.0.1'
USER jenkins
После этого сохраняем файл(Ctrl+S, Ctrl+X) и переходим в папку testbed
с помощью команды cd /opt/testbed
.
Далее необходимо остановить контейнер Jenkins с помощью команды docker compose down
.
Далее открываем файл docker-compose.yml
с помощью команды nano docker-compose.yml
и изменяем строчку с image: jenkins/jenkins:lts
на build: ./image
.
Пример как должен выглядеть файл docker-compose.yml
:
version: '3.4'
services:
jenkins:
user: root
restart: always
# image: jenkins/jenkins:lts
build:
context: ./image
volumes:
- ${PWD}/work/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8888:8080
network_mode: bridge
environment:
- ALLURE_NO_ANALYTICS=1
Сохраняем файл(Ctrl+S, Ctrl+X) и запускаем контейнер Jenkins с помощью команды docker compose up -d
.
Если всё прошло успешно, то в терминале будет отображено следующее:
Создание и активация виртуального окружения происходит командой
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
Для начала необходимо остановить контейнер Jenkins с помощью команды docker compose down
.
Далее добавляем Selenoid в файл docker-compose.yml
:
Нажать, чтобы раскрыть
selenoid:
image: aerokube/selenoid:latest-release
volumes:
- "${PWD}/init/selenoid:/etc/selenoid"
- "${PWD}/work/selenoid/video:/opt/selenoid/video"
- "${PWD}/work/selenoid/logs:/opt/selenoid/logs"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- OVERRIDE_VIDEO_OUTPUT_DIR=/opt/testbed/work/selenoid/video
command:
[
"-conf",
"/etc/selenoid/browsers.json",
"-video-output-dir",
"/opt/selenoid/video",
"-log-output-dir",
"/opt/selenoid/logs"
]
ports:
- "4444:4444"
network_mode: bridge
selenoid-ui:
image: "aerokube/selenoid-ui:latest-release"
network_mode: bridge
links:
- selenoid
ports:
- "8080:8080"
command: [ "--selenoid-uri", "http://selenoid:4444" ]
Полностью файл docker-compose.yml
должен выглядеть следующим образом:
Нажать, чтобы раскрыть
version: '3.4'
services:
jenkins:
user: root
restart: always
# image: jenkins/jenkins:lts
build:
context: ./image
volumes:
- ${PWD}/work/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8888:8080
network_mode: bridge
environment:
- ALLURE_NO_ANALYTICS=1
selenoid:
image: aerokube/selenoid:latest-release
volumes:
- "${PWD}/init/selenoid:/etc/selenoid"
- "${PWD}/work/selenoid/video:/opt/selenoid/video"
- "${PWD}/work/selenoid/logs:/opt/selenoid/logs"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- OVERRIDE_VIDEO_OUTPUT_DIR=/opt/testbed/work/selenoid/video
command:
[
"-conf",
"/etc/selenoid/browsers.json",
"-video-output-dir",
"/opt/selenoid/video",
"-log-output-dir",
"/opt/selenoid/logs"
]
ports:
- "4444:4444"
network_mode: bridge
selenoid-ui:
image: "aerokube/selenoid-ui:latest-release"
network_mode: bridge
links:
- selenoid
ports:
- "8080:8080"
command: [ "--selenoid-uri", "http://selenoid:4444" ]
Переходим в папку init/selenoid
с помощью команды cd /opt/testbed/init/selenoid
.
Создаём файл browsers.json
с помощью команды nano browsers.json
и добавляем следующий код:
Нажать, чтобы раскрыть
{
"chrome": {
"default": "123.0",
"versions": {
"123.0": {
"image": "selenoid/vnc_chrome:123.0",
"port": "4444",
"path": "/"
},
"122.0": {
"image": "selenoid/vnc_chrome:122.0",
"port": "4444",
"path": "/"
}
}
},
"firefox": {
"default": "124.0",
"versions": {
"124.0": {
"image": "selenoid/vnc_firefox:124.0",
"port": "4444",
"path": "/wd/hub"
},
"123.0": {
"image": "selenoid/vnc_firefox:123.0",
"port": "4444",
"path": "/wd/hub"
}
}
},
"opera": {
"default": "109.0",
"versions": {
"109.0": {
"image": "selenoid/vnc_opera:109.0",
"port": "4444",
"path": "/"
},
"108.0": {
"image": "selenoid/vnc_opera:108.0",
"port": "4444",
"path": "/"
}
}
},
"MicrosoftEdge": {
"default": "123.0",
"versions": {
"123.0": {
"image": "browsers/edge:123.0",
"port": "4444",
"path": "/"
},
"122.0": {
"image": "browsers/edge:122.0",
"port": "4444",
"path": "/"
}
}
}
}
Сохраняем файл(Ctrl+S, Ctrl+X) и переходим в папку testbed
с помощью команды cd /opt/testbed
.
Выше представлен пример для браузеров Chrome, Firefox, Opera и Microsoft Edge. Для каждого браузера указаны версии и пути к образам.
Если необходимо добавить другие браузеры или версии браузеров, то можно воспользоваться официальной документацией.
Все образы браузеров можно найти на Docker Hub. Как пример для браузеров Chrome ссылка на образы будет следующей: ссылка
Для скачивания образов браузеров Chrome, Firefox, Opera и Microsoft Edge необходимо ввести команды:
docker pull selenoid/vnc_chrome:123.0 && docker pull selenoid/vnc_chrome:122.0 && docker pull selenoid/vnc_firefox:124.0 && docker pull selenoid/vnc_firefox:123.0 && docker pull selenoid/vnc_opera:109.0 && docker pull selenoid/vnc_opera:108.0 && docker pull browsers/edge:123.0 && docker pull browsers/edge:122.0
Данные в команде указаны для примера. Если в файле browsers.json
указаны другие версии браузеров, то необходимо указать их в команде.
Для того чтобы видео отображалось в Selenoid необходимо ввести команду docker pull selenoid/video-recorder:latest-release
.
После того как все образы браузеров скачаны, можно запустить Selenoid с помощью команды docker compose up -d
.
Если всё прошло успешно, то в терминале будет отображено следующее:
Далее переходим в браузере по адресу http://ip-address-вашего сервера:8080
и увидим окно Selenoid UI.
Если в верней части в SSE
и в SELENOID
отображается connected
, то Selenoid работает корректно.
Также можно попробовать запустить в ручном режиме браузер, для этого необходимо перейти на вкладку CAPABILITIES
и выбрать браузер и версию браузера в выпадающем списке. После этого нажать кнопку CREATE SESSION
.
Для начала нужно узнать id контейнера с помощью команды docker ps
. После этого вводим команду docker exec -it id_контейнера sh
.
Для просмотра списка контейнеров необходимо ввести команду docker ps
.
Для перезапуска контейнера необходимо ввести команду docker restart id_контейнера
.
Для остановки контейнера необходимо ввести команду docker stop id_контейнера
.
Для удаления контейнера необходимо ввести команду я
или же docker rm -f id_контейнера
.
Для просмотра списка образов необходимо ввести команду docker images
.
Для удаления образа необходимо ввести команду docker rmi id_образа
или же docker rmi -f id_образа
.