Files
pw/README.md

7.4 KiB
Raw Permalink Blame History

OTUS ProjectWork: Jenkins + Ansible + JJB + Docker

Полностью автоматизированная раскатка проектной работы:

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

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

  • homework_1 (main, homework_2) - WEB BDD/Cucumber;
  • hw3 (main, homework_5) - API REST/Stub & API;
  • homework_4 - Selenium + API Citrus;
  • homework_6 - Playwright;
  • homework_7 - Appium, APK скачивается автоматически через APP_URL;

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

Сервисы:

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

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

Набор job

  1. jobs-uploader - накатывает/обновляет job через JJB.
  2. infra-health-check - проверка Jenkins/Registry/образов/агентов.
  3. qa-runner - оркестратор параллельного запуска всех тестовых контуров (cron: 15 1 * * *).
  4. qa-selenium-tests
  5. qa-web-bdd-tests
  6. qa-api-citrus-tests
  7. qa-api-contract-tests
  8. qa-api-rest-tests
  9. qa-playwright-tests
  10. qa-maven-extra-tests
  11. qa-mobile-appium-tests

Вьюхи в 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/projectwork
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/projectwork && ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml -e jobs_profile=devops"

После этого запускаете jobs-uploader (дефолт JJB_PATH=/workspace/projectwork/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/projectwork && 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 запускает в параллели все контуры и всегда публикует runner-summary.txt с:

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

Для BDD по умолчанию запускаются обе ветки из homework_1: main и homework_2 (BDD_REFS=main,homework_2).

Отчетность

Все тестовые job публикуют:

  • Allure report (/allure);
  • JUnit результаты;
  • run-info.txt;
  • target/** артефакты (или аналогичные артефакты проекта).

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

  • environment.properties
  • executor.json
  • categories.json (там, где применимо)

Для qa-selenium-tests и qa-web-bdd-tests:

  • включен сбор всех новых mp4 из Selenoid за прогон;
  • видео прикладываются в Allure через external attachments.

Для qa-playwright-tests:

  • по умолчанию используется mcr.microsoft.com/playwright/java:v1.58.0-jammy (PLAYWRIGHT_DOCKER_IMAGE).

Для qa-mobile-appium-tests:

  • перед запуском синхронизируются wiremock/mappings и wiremock/__files/wishlist.apk в контейнер;
  • проверяется доступность APP_URL изнутри эмулятора;
  • сохраняются project/target/mobile-debug/*.

qa-runner завершает сборку как UNSTABLE, если падают только UI-контуры (qa-selenium-tests, qa-web-bdd-tests, qa-playwright-tests). Для остальных контуров падение блокирующее (FAILURE).

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

Снести все:

bash:

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

wsl:

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/projectwork && 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

wsl:

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/projectwork && 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/selenoid
  • compose/images/ - Dockerfile для агентов и test-runner образов
  • config/jobs/ - full JJB (DevOps + QA)
  • config/jobs-devops/ - JJB профиль только для DevOps job
  • config/wiremock/ - маппинги для контрактных API тестов
  • contracts-tests/ - API контрактные тесты (JsonSchemaValidation)