Files
pw/README.md
T

141 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
```bash
cd C:/Users/spawn/IdeaProjects/otus-autotests/hw8
```
### 2. Подготовить `.env` для compose
```bash
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
```bash
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
```
Если запускаете из Windows PowerShell без установленного Ansible:
```powershell
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:
```bash
docker compose -f compose/docker-compose.yml --env-file compose/.env run --rm jobs_uploader
```
## Полное удаление стенда
```bash
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
```
## Чистый повторный запуск (reset + deploy)
```bash
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
```