Files
pw/README.md
T

188 lines
7.4 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 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` (желательно для стабильной эмуляции)
## Запуск с нуля
Подготовка:
```bash
cd /path/to/projectwork
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/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`:
```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/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`:
```bash
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
```
`wsl`:
```powershell
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`:
```bash
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/down.yml
ansible-playbook -i ansible/inventory/hosts.ini ansible/playbooks/site.yml
```
`wsl`:
```powershell
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)