Files

164 lines
6.2 KiB
Markdown
Raw Permalink 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
Полностью автоматизированная раскатка ДЗ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