← Назад к вопросам

Как раскатывал тестовые сборки на Android

1.0 Junior🔥 121 комментариев
#Мобильное тестирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Управление тестовыми сборками Android: от CI/CD до раздачи

Раскатка тестовых сборок на Android — это критически важный процесс в конвейере доставки, требующий автоматизации, контроля версий и удобного доступа для всех участников команды (разработчики, тестировщики, продакт-менеджеры, дизайнеры). За свою практику я выстроил и поддерживал несколько подходов, эволюционирующих от ручных методов до полностью автоматизированных CI/CD-пайплайнов, которые являются сегодня стандартом индустрии.

Инфраструктура и инструменты автоматической сборки (CI)

Первым и главным шагом является настройка непрерывной интеграции (Continuous Integration).

  • Система контроля версий (VCS): Весь код, включая основной проект, тесты и конфигурации сборки, хранится в Git (GitHub, GitLab, Bitbucket). Используется модель ветвления, например, Git Flow или GitHub Flow.
  • CI-сервер: Настраивается Jenkins, GitLab CI/CD, GitHub Actions или Bitrise. Он реагирует на события в репозитории (push, pull request, merge, tag).
  • Конфигурация сборки (build.gradle): В файле app/build.gradle настраиваются разные build variants (продукционные флейворы, типа prodDebug/prodRelease, и тестовые, типа stagingDebug). Для тестовых сборок часто:
    *   Используется другое **Application ID** (например, `.app.staging`), чтобы позволить установить две версии приложения одновременно.
    *   Настраивается отдельный **backend endpoint** (через **buildConfigField**).
    *   Включается логирование и отладка, которые отключены в продакшене.

Пример конфигурации флейвора в build.gradle:

android {
    flavorDimensions "environment"
    productFlavors {
        staging {
            dimension "environment"
            applicationIdSuffix ".staging"
            buildConfigField("String", "API_URL", '"https://api.staging.example.com"')
            resValue "string", "app_name", "MyApp (Staging)"
        }
        production {
            dimension "environment"
            buildConfigField("String", "API_URL", '"https://api.example.com"')
        }
    }
}

Скрипт CI-сервера запускает сборку (обычно по нотации assembleStagingRelease), создавая APK или AAB файлы.

Распределение и доставка сборок (CD)

После успешной сборки артефакт необходимо раздать команде. Здесь используются специализированные сервисы, интегрируемые в CI-пайплайн.

  1. Внутреннее тестирование (Alpha): Для быстрой раздачи внутри команды разработки и QA.
    *   **Firebase App Distribution:** Позволяет загружать сборки и рассылать инвайты по email или через группы. Можно интегрировать прямо в **GitHub Actions** или **Jenkins**.
    *   **Отправка в Slack/Telegram:** Простой скрипт может загружать собранный APK в канал команды. Удобно для мгновенных сборок с фичей.

    Пример этапа в **GitHub Actions** для отправки в Firebase:
```yaml
- name: Upload to Firebase App Distribution
  uses: wzieba/Firebase-Distribution-Github-Action@v1
  with:
    appId: ${{ secrets.FIREBASE_APP_ID }}
    token: ${{ secrets.FIREBASE_TOKEN }}
    groups: qa-team,developers
    file: app/build/outputs/apk/staging/release/app-staging-release.apk
```

2. Закрытое бета-тестирование: Для расширенного круга тестировщиков (Early Access Program).

    *   **Google Play Console (Внутренний/Закрытый трек):** Самый интегрированный способ. Сборка подписывается релизным ключом и загружается в закрытый трек. Тестировщики получают обновления через официальный магазин.
    *   **Microsoft App Center:** Альтернатива Firebase с богатыми возможностями по распределению, crash-репортам и аналитике.

  1. Автоматизация и нотификации: Любой успешный билд должен сопровождаться автоматическим уведомлением. В сообщении (email, Slack) обязательно указывается:
    *   Номер сборки (версия из `BuildConfig.VERSION_NAME`).
    *   Ссылка на скачивание.
    *   Ссылка на **changelog** (например, коммиты с момента предыдущего билда, которые автоматически извлекаются из git).
    *   Ссылка на задачу в **Jira** или **YouTrack**.

Сопровождение и мониторинг

Просто раздать сборку недостаточно. Важно поддерживать порядок:

  • Версионирование артефактов: Каждая сборка имеет уникальный номер (versionCode), часто привязанный к номеру билда в CI (например, Jenkins BUILD_ID).
  • Хранение артефактов: CI-сервер или облачное хранилище (например, Google Cloud Storage) сохраняют не только конечный APK, но и mapping-файлы для декодирования crash-логов. Последние 20-30 сборок обычно хранятся, более старые архивируются.
  • Информационная панель (Dashboard): Для наглядности можно создать простую веб-страницу со списком последних доступных сборок, их статусом (прошел smoke-тесты/не прошел) и ссылками. Это может быть статическая страница, генерируемая CI-скриптом.

Заключение

В итоге, идеальный процесс раскатки выглядит так: разработчик создает pull request -> CI запускает сборку и unit-тесты -> после мержа в ветку develop автоматически собирается staging-сборка -> она загружается в Firebase App Distribution и закрытый трек Google Play -> уведомление со ссылками и списком изменений приходит в чат команды. Это обеспечивает непрерывную доставку (Continuous Delivery) тестовых сборок с минимальными задержками и максимальной прозрачностью, что напрямую влияет на скорость разработки и качество продукта.