# 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` (желательно для стабильной эмуляции) ## Запуск с нуля Подготовка: ```bash cd /path/to/hw8 cp compose/.env.example compose/.env ``` Минимум заполнить в `compose/.env`: - `JENKINS_ADMIN_ID` - `JENKINS_ADMIN_PASSWORD` - `MOBILE_DB_PASSWORD` ### Вариант 1: только DevOps `bash`: ```bash ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml -e jobs_profile=devops ``` `wsl`: ```powershell 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`: ```bash ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml ``` `wsl`: ```powershell 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 и ключевые параметры. ## Команды для повторного запуска с нуля Снести все: ```bash ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml ``` ```powershell 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')`. ```bash ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml ``` ```powershell 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