164 lines
6.2 KiB
Markdown
164 lines
6.2 KiB
Markdown
# 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
|