2aa8a49ee1257ecb68ceb595cee354ee0bc5a015
OTUS HW8: Jenkins + Ansible + JJB + Docker Slaves
Полностью автоматизированный проект для ДЗ8:
- Jenkins в Docker;
- reverse proxy (Nginx);
- локальный Docker Registry;
- docker-slaves (агенты Jenkins);
- Jenkins Job Builder (JJB) для автоматического создания/обновления job;
- Ansible playbook для раскатки всего с нуля;
- 6 готовых job, включая runner с параллельным запуском тестов;
- Allure-отчеты для Selenium и Appium job.
Проект использует локальные домашки из корня:
C:/Users/spawn/IdeaProjects/otus-autotests/homework_4(Selenium + Citrus);C:/Users/spawn/IdeaProjects/otus-autotests/hw7(Appium).
Что развертывается
Сервисы (Docker Compose)
registry(localhost:5005) — хранение образов тестов и слейвов.jenkins(localhost:8081) — Jenkins controller (JCasC).nginx(localhost:8088) — внешний вход в Jenkins.agent-maven— swarm-agent с labelmaven docker.agent-jjb— swarm-agent с labeljjb docker.jobs_uploader— one-shot контейнер, который накатывает job черезjenkins-jobs update.
Автоматизация (Ansible)
Playbook:
- Поднимает
registry + jenkins + nginx. - Ждет готовности Jenkins.
- Собирает и пушит в registry все нужные образы:
localhost:5005/otus/slave-maven:1.0.0localhost:5005/otus/slave-jjb:1.0.0localhost:5005/otus/test-selenium:1.0.0localhost:5005/otus/test-api:1.0.0localhost:5005/otus/test-mobile:1.0.0
- Поднимает слейвы.
- Накатывает все job через JJB.
По умолчанию UI через nginx опубликован на 8088, чтобы не конфликтовать с Selenoid UI из homework_4 (часто занимает 8080).
6 Jenkins job
jobs-uploader— обновление всех job изhw8/config/jobs.infra-health-check— проверка инфраструктуры и образов.qa-selenium-tests— Selenium/Selenide (browser parameter + Allure).qa-mobile-appium-tests— Appium (APP_URL для автоскачивания APK + Allure).qa-api-citrus-tests— API (citrus-tests).qa-runner— запускаетqa-selenium-tests,qa-mobile-appium-tests,qa-api-citrus-testsпараллельно.
Есть вьюхи:
DevOps;QA.
Важные требования окружения
- Docker + Docker Compose V2.
- Ansible.
- Linux/WSL2 host для mobile-части (желательно с
/dev/kvmдля эмуляторовbudtmo/docker-android). - Доступ к БД для
hw7(DB_URL/DB_USER/DB_PASSWORD).
Быстрый старт с нуля
1. Перейти в hw8
cd C:/Users/spawn/IdeaProjects/otus-autotests/hw8
2. Подготовить .env для compose
cp compose/.env.example compose/.env
Обязательно заполните в compose/.env:
JENKINS_ADMIN_ID,JENKINS_ADMIN_PASSWORD;MOBILE_DB_PASSWORD(если не хотите передаватьDB_PASSWORDруками в параметрах job);- при необходимости
NGINX_PORTиJENKINS_URL_PUBLIC.
3. Запустить полный деплой playbook
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
Если запускаете из Windows PowerShell без установленного Ansible:
wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/hw8 && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml"
4. Открыть Jenkins
- через nginx:
http://localhost:8088 - напрямую:
http://localhost:8081
Логин/пароль: из compose/.env (JENKINS_ADMIN_ID, JENKINS_ADMIN_PASSWORD).
Как запускать тесты
Рекомендуемый запуск
Запустить qa-runner через Build with Parameters.
Selenium отдельно
Запустить qa-selenium-tests:
BROWSER:chrome|firefox;HEADLESS:true|false.
Appium отдельно
Запустить qa-mobile-appium-tests:
DB_PASSWORD(по умолчаниюstudent, если пусто — берется из envMOBILE_DB_PASSWORDJenkins controller);APP_URLпо умолчанию:http://wiremock:8080/wishlist.apk.- дефолтные пароли тест-аккаунтов из
hw7:user1us/user2us/user3us(соответствуют логинам).
APP_URL передается в capability app, поэтому APK скачивается автоматически Appium-сервером эмулятора.
Отчеты
qa-selenium-testsпубликует Allure + JUnit.qa-mobile-appium-testsпубликует Allure + JUnit.- артефакты
target/**архивируются в Jenkins.
Структура проекта
ansible/— playbook раскатки/удаления.compose/— инфраструктура Jenkins (compose, Dockerfile, JCasC, nginx, jobs_uploader).compose/images/— Dockerfile для слейвов и test-runner образов.config/jobs/— JJB YAML + Groovy pipeline scripts + views.
Повторное обновление job
- Через Jenkins job
jobs-uploader, либо - Ручным one-shot:
docker compose -f compose/docker-compose.yml --env-file compose/.env run --rm jobs_uploader
Полное удаление стенда
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
Чистый повторный запуск (reset + deploy)
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
Description
Languages
Groovy
89.8%
Dockerfile
5.2%
Shell
3.5%
Java
1.5%