OTUS HW8: Jenkins + Ansible + JJB + Docker

Полностью автоматизированная раскатка ДЗ8:

  • Jenkins controller в Docker;
  • reverse proxy Nginx;
  • локальный Docker Registry;
  • Jenkins agents (docker slaves);
  • Jenkins Job Builder (JJB), без ручного создания job;
  • Ansible для полного подъема/сноса стенда;
  • 6 job (runner + uploader + 3 тестовые + infra check);
  • Allure отчеты для UI и mobile.

Тестовые проекты всегда берутся из Git в runtime:

  • homework_4 (Selenium + API Citrus);
  • homework_7 (Appium, APK скачивается автоматически через APP_URL).

Что поднимается

Сервисы:

  • Jenkins: http://localhost:8081
  • Jenkins через Nginx: http://localhost:8088
  • Registry: http://localhost:5005/v2/
  • Agent maven (docker label: maven docker)
  • Agent jjb (docker label: jjb docker)
  • one-shot jobs_uploader container

Контроллер не исполняет сборки (numExecutors: 0, mode EXCLUSIVE), все job идут только на агентах.

6 job

  1. jobs-uploader - накатывает/обновляет job через JJB.
  2. infra-health-check - проверка Jenkins/Registry/образов/агентов.
  3. qa-selenium-tests - Selenium/Selenide с выбором браузера.
  4. qa-api-citrus-tests - API тесты.
  5. qa-mobile-appium-tests - Appium тесты, APK через APP_URL.
  6. qa-runner - параллельный запуск selenium + api + mobile.

Вьюхи в Jenkins:

  • DevOps
  • QA-Runner
  • QA-Tests
  • all

Варианты раскатки job

Реализованы 2 режима через jobs_profile:

  • devops - только jobs-uploader и infra-health-check
  • full - весь набор job (режим по умолчанию)

Требования

  • Docker + Docker Compose V2
  • Ansible (в Linux/WSL)
  • доступ в интернет для pull базовых образов и maven dependencies
  • для mobile: Linux/WSL2 с /dev/kvm (желательно для стабильной эмуляции)

Запуск с нуля

Подготовка:

cd /path/to/hw8
cp compose/.env.example compose/.env

Минимум заполнить в compose/.env:

  • JENKINS_ADMIN_ID
  • JENKINS_ADMIN_PASSWORD
  • MOBILE_DB_PASSWORD

Вариант 1: только DevOps

bash:

ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml -e jobs_profile=devops

wsl:

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/hw8 && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml -e jobs_profile=devops"

После этого запускаете jobs-uploader (дефолт JJB_PATH=/workspace/hw8/config/jobs) и получаете QA job.

Вариант 2: сразу все job

bash:

ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml

wsl:

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/hw8 && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml"

Примечание: можно запускать и без -e jobs_profile=full — по умолчанию в site.yml используется профиль full (раскатываются все job).

Запуск тестов

Рекомендуемый вход: QA-Runner -> qa-runner -> Build with Parameters.

qa-runner запускает в параллели:

  • qa-selenium-tests
  • qa-api-citrus-tests
  • qa-mobile-appium-tests

И всегда публикует runner-summary.txt с:

  • номерами дочерних сборок;
  • статусами;
  • ссылками на каждую дочернюю job.

Отчетность

qa-selenium-tests и qa-mobile-appium-tests публикуют:

  • Allure report (/allure);
  • JUnit результаты;
  • run-info.txt;
  • target/** артефакты (включая скриншоты/логи тестового проекта, если они туда пишутся).
  • для mobile дополнительно сохраняются project/target/mobile-debug/* (docker logs и docker inspect эмуляторов/сети).
  • для mobile параметр SUREFIRE_RERUN_FAILING (по умолчанию 1) снижает flaky-падения Appium-сессий без правок кода HW7.

Дополнительно в Allure:

  • environment.properties
  • executor.json
  • categories.json

Также в currentBuild.description пишется, кто запустил job и ключевые параметры.

Команды для повторного запуска с нуля

Снести все:

ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/hw8 && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml"

Полный reset + deploy:

По умолчанию эта команда раскатывает профиль full (все job: DevOps + QA), так как в ansible/playbooks/site.yml задано jobs_profile | default('full').

ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/hw8 && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml"

Если нужен только профиль devops, добавьте -e jobs_profile=devops во вторую команду (site.yml).

Где что лежит

  • ansible/ - playbook раскатки/удаления
  • compose/ - инфраструктура Jenkins/agents/registry/nginx
  • compose/images/ - Dockerfile для агентов и test-runner образов
  • config/jobs/ - full JJB (DevOps + QA)
  • config/jobs-devops/ - JJB профиль только для DevOps job
S
Description
No description provided
Readme 81 KiB
Languages
Groovy 80.8%
Dockerfile 11.4%
Shell 7.8%