mirror of
https://gitlab.com/foxixus/neomovies_mobile.git
synced 2025-10-28 03:58:50 +05:00
- Use saas-linux-medium-amd64 tag for TorrentEngine build (4GB RAM, 2 cores) - Update documentation with Instance Runner setup guide - Add comparison table for different runner sizes - Keep docker tag for other jobs as fallback
305 lines
8.4 KiB
Markdown
305 lines
8.4 KiB
Markdown
# 🚀 CI/CD Configuration для NeoMovies Mobile
|
||
|
||
## 📋 Обзор
|
||
|
||
Автоматическая сборка APK и TorrentEngine модуля с оптимизацией использования RAM.
|
||
|
||
---
|
||
|
||
## 🏗️ Конфигурации
|
||
|
||
### 1. **GitLab CI/CD** (`.gitlab-ci.yml`)
|
||
|
||
Основная конфигурация для GitLab:
|
||
|
||
#### **Stages:**
|
||
- **build** - Сборка APK и AAR
|
||
- **test** - Анализ кода и тесты
|
||
- **deploy** - Публикация релизов
|
||
|
||
#### **Jobs:**
|
||
|
||
| Job | Описание | Артефакты | Ветки |
|
||
|-----|----------|-----------|-------|
|
||
| `build:torrent-engine` | Сборка TorrentEngine AAR | `*.aar` | dev, feature/*, MR |
|
||
| `build:apk-debug` | Сборка Debug APK | `app-debug.apk` | dev, feature/*, MR |
|
||
| `build:apk-release` | Сборка Release APK | `app-arm64-v8a-release.apk` | только dev |
|
||
| `test:flutter-analyze` | Анализ Dart кода | - | dev, MR |
|
||
| `test:android-lint` | Android Lint | HTML отчеты | dev, MR |
|
||
| `deploy:release` | Публикация релиза | - | только tags (manual) |
|
||
|
||
### 2. **GitHub Actions** (`.github/workflows/build.yml`)
|
||
|
||
Альтернативная конфигурация для GitHub:
|
||
|
||
#### **Workflows:**
|
||
|
||
| Workflow | Триггер | Описание |
|
||
|----------|---------|----------|
|
||
| `build-torrent-engine` | push, PR | Сборка AAR модуля |
|
||
| `build-debug-apk` | push, PR | Debug APK для тестирования |
|
||
| `build-release-apk` | push to dev | Release APK (split-per-abi) |
|
||
| `code-quality` | push, PR | Flutter analyze + Android Lint |
|
||
|
||
---
|
||
|
||
## ⚙️ Оптимизация RAM
|
||
|
||
### **gradle.properties**
|
||
|
||
```properties
|
||
# Уменьшено с 4GB до 2GB
|
||
org.gradle.jvmargs=-Xmx2G -XX:MaxMetaspaceSize=1G
|
||
|
||
# Kotlin daemon с ограничением
|
||
kotlin.daemon.jvmargs=-Xmx1G -XX:MaxMetaspaceSize=512m
|
||
|
||
# Включены оптимизации
|
||
org.gradle.parallel=true
|
||
org.gradle.caching=true
|
||
org.gradle.configureondemand=true
|
||
```
|
||
|
||
### **CI переменные**
|
||
|
||
```bash
|
||
# В CI используется еще меньше RAM
|
||
GRADLE_OPTS="-Xmx1536m -XX:MaxMetaspaceSize=512m"
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 Артефакты
|
||
|
||
### **TorrentEngine AAR:**
|
||
- Путь: `android/torrentengine/build/outputs/aar/`
|
||
- Файл: `torrentengine-release.aar`
|
||
- Срок хранения: 7 дней
|
||
- Размер: ~5-10 MB
|
||
|
||
### **Debug APK:**
|
||
- Путь: `build/app/outputs/flutter-apk/`
|
||
- Файл: `app-debug.apk`
|
||
- Срок хранения: 7 дней
|
||
- Размер: ~50-80 MB
|
||
|
||
### **Release APK:**
|
||
- Путь: `build/app/outputs/flutter-apk/`
|
||
- Файл: `app-arm64-v8a-release.apk`
|
||
- Срок хранения: 30 дней
|
||
- Размер: ~30-50 MB (split-per-abi)
|
||
|
||
---
|
||
|
||
## 🚦 Триггеры сборки
|
||
|
||
### **GitLab:**
|
||
|
||
**Автоматически запускается при:**
|
||
- Push в `dev` ветку
|
||
- Push в `feature/torrent-engine-integration`
|
||
- Создание Merge Request
|
||
- Push тега (для deploy)
|
||
|
||
**Ручной запуск:**
|
||
- Web UI → Pipelines → Run Pipeline
|
||
- Выбрать ветку и нажать "Run pipeline"
|
||
|
||
### **GitHub:**
|
||
|
||
**Автоматически запускается при:**
|
||
- Push в `dev` или `feature/torrent-engine-integration`
|
||
- Pull Request в `dev`
|
||
|
||
**Ручной запуск:**
|
||
- Actions → Build NeoMovies Mobile → Run workflow
|
||
|
||
---
|
||
|
||
## 🔧 Настройка GitLab Instance Runners
|
||
|
||
### **Рекомендуется: Использовать GitLab Instance Runners (SaaS)**
|
||
|
||
GitLab предоставляет 112+ бесплатных shared runners для всех проектов!
|
||
|
||
**Как включить:**
|
||
|
||
1. Перейдите в **Settings → CI/CD → Runners**
|
||
2. Найдите секцию **"Instance runners"**
|
||
3. Нажмите **"Enable instance runners for this project"**
|
||
4. Готово! ✅
|
||
|
||
**Доступные теги для Instance Runners:**
|
||
|
||
| Тег | RAM | CPU | Описание |
|
||
|-----|-----|-----|----------|
|
||
| `saas-linux-small-amd64` | 2 GB | 1 core | Легкие задачи |
|
||
| `saas-linux-medium-amd64` | 4 GB | 2 cores | **Рекомендуется для Android** |
|
||
| `saas-linux-large-amd64` | 8 GB | 4 cores | Тяжелые сборки |
|
||
| `docker` | varies | varies | Любой Docker runner |
|
||
|
||
**Наша конфигурация использует:**
|
||
- TorrentEngine: `saas-linux-medium-amd64` (4GB, 2 cores)
|
||
- Остальные jobs: `docker` (автоматический выбор)
|
||
|
||
---
|
||
|
||
### **Альтернатива: Локальный Runner (не требуется)**
|
||
|
||
Только если нужна кастомная конфигурация:
|
||
|
||
```bash
|
||
# 1. Установка GitLab Runner
|
||
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
|
||
sudo apt-get install gitlab-runner
|
||
|
||
# 2. Регистрация Runner
|
||
sudo gitlab-runner register \
|
||
--url https://gitlab.com/ \
|
||
--registration-token YOUR_TOKEN \
|
||
--executor docker \
|
||
--docker-image mingc/android-build-box:latest \
|
||
--tag-list docker,android
|
||
|
||
# 3. Запуск
|
||
sudo gitlab-runner start
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Время сборки (примерно)
|
||
|
||
| Job | Время | RAM | CPU |
|
||
|-----|-------|-----|-----|
|
||
| TorrentEngine | ~5-10 мин | 1.5GB | 2 cores |
|
||
| Debug APK | ~15-20 мин | 2GB | 2 cores |
|
||
| Release APK | ~20-30 мин | 2GB | 2 cores |
|
||
| Flutter Analyze | ~2-3 мин | 512MB | 1 core |
|
||
| Android Lint | ~5-8 мин | 1GB | 2 cores |
|
||
|
||
---
|
||
|
||
## 🐳 Docker образы
|
||
|
||
### **mingc/android-build-box:latest**
|
||
|
||
Включает:
|
||
- Android SDK (latest)
|
||
- Flutter SDK
|
||
- Java 17
|
||
- Gradle
|
||
- Git, curl, wget
|
||
|
||
Размер: ~8GB
|
||
|
||
---
|
||
|
||
## 🔍 Кэширование
|
||
|
||
Для ускорения сборок используется кэширование:
|
||
|
||
```yaml
|
||
cache:
|
||
paths:
|
||
- .gradle/ # Gradle dependencies
|
||
- .pub-cache/ # Flutter packages
|
||
- android/.gradle/ # Android build cache
|
||
- build/ # Flutter build cache
|
||
```
|
||
|
||
**Эффект:**
|
||
- Первая сборка: ~25 минут
|
||
- Последующие: ~10-15 минут (с кэшем)
|
||
|
||
---
|
||
|
||
## 📝 Логи и отладка
|
||
|
||
### **Просмотр логов GitLab:**
|
||
|
||
1. Перейти в **CI/CD → Pipelines**
|
||
2. Выбрать pipeline
|
||
3. Кликнуть на job для просмотра логов
|
||
|
||
### **Отладка локально:**
|
||
|
||
```bash
|
||
# Тестирование сборки TorrentEngine
|
||
cd android
|
||
./gradlew :torrentengine:assembleRelease \
|
||
--no-daemon \
|
||
--parallel \
|
||
--stacktrace
|
||
|
||
# Тестирование Flutter APK
|
||
flutter build apk --debug --verbose
|
||
```
|
||
|
||
---
|
||
|
||
## 🚨 Troubleshooting
|
||
|
||
### **Gradle daemon crashed:**
|
||
|
||
**Проблема:** `Gradle build daemon disappeared unexpectedly`
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Увеличить RAM в gradle.properties
|
||
org.gradle.jvmargs=-Xmx3G
|
||
|
||
# Или отключить daemon
|
||
./gradlew --no-daemon
|
||
```
|
||
|
||
### **Out of memory:**
|
||
|
||
**Проблема:** `OutOfMemoryError: Java heap space`
|
||
|
||
**Решение:**
|
||
```bash
|
||
# Увеличить heap в CI
|
||
GRADLE_OPTS="-Xmx2048m -XX:MaxMetaspaceSize=768m"
|
||
```
|
||
|
||
### **LibTorrent4j native libraries not found:**
|
||
|
||
**Проблема:** Нативные библиотеки не найдены
|
||
|
||
**Решение:**
|
||
- Убедиться что все архитектуры включены в `build.gradle.kts`
|
||
- Проверить `splits.abi` конфигурацию
|
||
|
||
---
|
||
|
||
## 📚 Дополнительные ресурсы
|
||
|
||
- [GitLab CI/CD Docs](https://docs.gitlab.com/ee/ci/)
|
||
- [GitHub Actions Docs](https://docs.github.com/actions)
|
||
- [Flutter CI/CD Guide](https://docs.flutter.dev/deployment/cd)
|
||
- [Gradle Performance](https://docs.gradle.org/current/userguide/performance.html)
|
||
|
||
---
|
||
|
||
## 🎯 Следующие шаги
|
||
|
||
1. **Настроить GitLab Runner** (если еще не настроен)
|
||
2. **Запушить изменения** в dev ветку
|
||
3. **Проверить Pipeline** в GitLab CI/CD
|
||
4. **Скачать артефакты** после успешной сборки
|
||
5. **Протестировать APK** на реальном устройстве
|
||
|
||
---
|
||
|
||
## 📞 Поддержка
|
||
|
||
При проблемах с CI/CD:
|
||
1. Проверьте логи pipeline
|
||
2. Убедитесь что Runner активен
|
||
3. Проверьте доступность Docker образа
|
||
4. Создайте issue с логами ошибки
|
||
|
||
---
|
||
|
||
**Создано с ❤️ для NeoMovies Mobile**
|