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_uploadercontainer
Контроллер не исполняет сборки (numExecutors: 0, mode EXCLUSIVE), все job идут только на агентах.
6 job
jobs-uploader- накатывает/обновляет job через JJB.infra-health-check- проверка Jenkins/Registry/образов/агентов.qa-selenium-tests- Selenium/Selenide с выбором браузера.qa-api-citrus-tests- API тесты.qa-mobile-appium-tests- Appium тесты, APK черезAPP_URL.qa-runner- параллельный запускselenium + api + mobile.
Вьюхи в Jenkins:
DevOpsQA-RunnerQA-Testsall
Варианты раскатки job
Реализованы 2 режима через jobs_profile:
devops- толькоjobs-uploaderиinfra-health-checkfull- весь набор 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_IDJENKINS_ADMIN_PASSWORDMOBILE_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-testsqa-api-citrus-testsqa-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.propertiesexecutor.jsoncategories.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/nginxcompose/images/- Dockerfile для агентов и test-runner образовconfig/jobs/- full JJB (DevOps + QA)config/jobs-devops/- JJB профиль только для DevOps job