Files
homework_8/README.md
T

6.1 KiB
Raw Blame History

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 с label maven docker.
  • agent-jjb — swarm-agent с label jjb docker.
  • jobs_uploader — one-shot контейнер, который накатывает job через jenkins-jobs update.

Автоматизация (Ansible)

Playbook:

  1. Поднимает registry + jenkins + nginx.
  2. Ждет готовности Jenkins.
  3. Собирает и пушит в registry все нужные образы:
    • localhost:5005/otus/slave-maven:1.0.0
    • localhost:5005/otus/slave-jjb:1.0.0
    • localhost:5005/otus/test-selenium:1.0.0
    • localhost:5005/otus/test-api:1.0.0
    • localhost:5005/otus/test-mobile:1.0.0
  4. Поднимает слейвы.
  5. Накатывает все job через JJB.

По умолчанию UI через nginx опубликован на 8088, чтобы не конфликтовать с Selenoid UI из homework_4 (часто занимает 8080).

6 Jenkins job

  1. jobs-uploader — обновление всех job из hw8/config/jobs.
  2. infra-health-check — проверка инфраструктуры и образов.
  3. qa-selenium-tests — Selenium/Selenide (browser parameter + Allure).
  4. qa-mobile-appium-tests — Appium (APP_URL для автоскачивания APK + Allure).
  5. qa-api-citrus-tests — API (citrus-tests).
  6. 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, если пусто — берется из env MOBILE_DB_PASSWORD Jenkins 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

  1. Через Jenkins job jobs-uploader, либо
  2. Ручным 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