Тема
Secrets, ключи и подпись
Какие ключи существуют
| Объект | Назначение | Где хранить |
|---|---|---|
| App signing key | Финальная подпись APK для пользователей | Play App Signing |
| Upload key | Подпись AAB, загружаемого разработчиком | Offline backup + изолированный CI secret |
| Keystore passwords | Доступ к upload keystore/key alias | Отдельные Gitea secrets |
| Play service account | API-публикация | Secret file только publish job |
| Codex API credential | Codex automation | Только отдельный Codex job |
Play App Signing обязателен для новых приложений с августа 2021 года. Загрузка AAB.
Базовые правила
- Не коммитьте
*.jks,*.keystore, service-account JSON и пароли. - Не передавайте секреты через command-line arguments, если они попадут в logs или process list.
- Не используйте один service account на все проекты без необходимости.
- Выдавайте service account права только конкретного приложения/tracks.
- Не храните app signing key и upload key в единственной копии.
- Проверяйте восстановление backup до первого production release.
- Периодически проверяйте пользователей и права в Play Console.
Gitea Secrets
Gitea поддерживает repository, organization и user secrets, доступные как ${{ secrets.NAME }}. Repository-level secret имеет приоритет над более общими. Документация Gitea Secrets.
Предпочтительные имена:
text
ANDROID_UPLOAD_KEYSTORE
ANDROID_UPLOAD_STORE_PASSWORD
ANDROID_UPLOAD_KEY_ALIAS
ANDROID_UPLOAD_KEY_PASSWORD
PLAY_SERVICE_ACCOUNT_JSONЕсли система CI умеет file secrets, используйте их. Если секрет передаётся как строка, workflow должен создать временный файл с ограниченными permissions и гарантированно удалить его в cleanup step.
Разделение jobs
Build job
- читает source;
- запускает tests;
- не имеет marketplace credentials;
- может собрать unsigned release candidate.
Signing job
- получает только проверенный source/commit;
- получает upload keystore;
- формирует signed AAB;
- не запускает Codex и непроверенные lifecycle scripts.
Publish job
- получает signed AAB по digest;
- получает Play service account;
- загружает только в разрешённый track;
- не пересобирает приложение.
Проверка перед загрузкой
bash
sha256sum app-release.aab
jarsigner -verify -verbose -certs app-release.aabDigest запишите в release evidence. Не печатайте значения секретов для диагностики; подтверждайте только факт наличия и успешной проверки.
Потеря upload key
Play App Signing позволяет запросить reset upload key, не меняя app signing key у пользователей. Тем не менее процедура требует подтверждения владельца и может задержать релиз, поэтому основной контроль — резервная копия и проверенный runbook восстановления.