CI/CD (Continuous Integration / Continuous Delivery) — це практика автоматичної збірки, тестування та доставки додатку при кожній зміні коду. За даними Statista (2025), 80% команд мобільної розробки використовують CI/CD у своїй роботі. Ця стаття розглядає популярні CI-інструменти, Fastlane для автоматизації мобільних збірок, а також Canary Release та Feature Flags.
Головне
Continuous Integration — основа CI/CD автоматизації мобільних додатків. Практика, при якій кожен розробник кілька разів на день зливає свій код у спільний репозиторій. Після кожного пуша CI-сервер автоматично збирає проект і запускає тести. Якщо тести падають — збірка вважається зламаною, і команда виправляє проблему негайно. CI запобігає ситуації «у мене все працює», коли код одного розробника ламає код іншого.
Build Pipeline — послідовність кроків, які виконуються при кожному пуші: лінтінг коду → unit-тести → збірка debug APK/IPA → інтеграційні тести → збірка release. Кожен крок може запускатися тільки після успішного проходження попереднього. Артефакти збірки — APK, IPA, AAB, звіти про тестування — зберігаються та доступні для завантаження.
Continuous Delivery — код автоматично збирається та тестується, але рішення про викладку в продакшн приймає людина. Continuous Deployment — кожен успішний білд автоматично викладається в продакшн. Для мобільних додатків частіше використовується CD (доставка в магазини) через TestFlight або Internal Testing, оскільки остаточне рішення про публікацію приймає розробник або менеджер. Staging — середовище, максимально наближене до продакшну, на якому тестується збірка перед релізом.
GitHub Actions — вбудована CI/CD-система для автоматизації мобільних додатків у GitHub. Actions використовує YAML-конфігурацію (.github/workflows) для опису пайплайнів. Для мобільної розробки доступні готові actions: actions/setup-java, gradle-build-action для Android, xcodebuild-action для iOS. GitHub Actions надає 2000 хвилин безкоштовного часу на місяць для приватних репозиторіїв.
Приклад: workflow для Android включає checkout коду, встановлення JDK 17, кешування залежностей Gradle, запуск lint та unit-тестів, збірку APK та завантаження артефакту. Для iOS — checkout, встановлення Xcode, pod install, запуск XCTest, архівування та експорт IPA. GitHub Actions інтегрується з GitHub Releases, Slack та Telegram для сповіщень.
GitLab CI — вбудована CI/CD-система в GitLab, конфігурована через .gitlab-ci.yml. GitLab CI використовує runners — агенти, що виконують завдання. Для мобільної розробки можна використовувати shared runners (Linux для Android) або власні runners (macOS для iOS). GitLab CI підтримує parallel jobs, artifacts, environments та manual approval для production-релізів.
Bitrise — CI/CD-платформа, спеціалізована на автоматизації мобільних додатків. Bitrise пропонує готові кроки (Steps) для Android, iOS, Flutter та React Native: Gradle Runner, Xcode Archive, Flutter Test, CocoaPods Install. Bitrise автоматично налаштовує код-підпис для iOS (через Codesigndoc) та надає віртуальні машини з попередньо встановленим Xcode, Android SDK, Flutter та іншими інструментами.
Переваги Bitrise: просте налаштування через візуальний редактор Workflow, підтримка паралельних білдів, інтеграція з Firebase Test Lab, App Store Connect та Google Play Console. Bitrise надає 90 хвилин безкоштовного часу на місяць для особистих проектів. В IT Sectr ми використовуємо Bitrise для всіх мобільних проектів — він значно спрощує CI/CD порівняно з ручним налаштуванням GitHub Actions.
| Критерій | GitHub Actions | GitLab CI | Bitrise | CircleCI |
|---|---|---|---|---|
| Спеціалізація | Універсальна | Універсальна | Мобільна | Універсальна |
| macOS для iOS | Так (macOS runner) | Свій runner | Так (вбудовано) | Так (macOS) |
| Безкоштовний ліміт | 2000 хв/міс | 400 хв/міс | 90 хв/міс | 6000 хв/міс |
| Fastlane інтеграція | Через run script | Через run script | Готовий Step | Через run script |
| Code Signing | Ручне налаштування | Ручне налаштування | Автоматичне | Через Fastlane |
| Паралельні білди | Так | Так | Так | Так |
Fastlane — інструмент автоматизації мобільних додатків для iOS та Android, написаний на Ruby. Fastlane складається з системи готових actions (понад 200) та DSL для опису сценаріїв через Fastfile. Fastlane вирішує завдання, які кожен мобільний розробник виконує вручну: підпис коду, створення скріншотів, завантаження в TestFlight та Google Play, керування сертифікатами та provisioning profiles.
Lane — іменований сценарій у Fastfile. Приклад: lane :release do — ланцюжок дій для випуску релізу. Match — інструмент для безпечного зберігання та синхронізації сертифікатів і provisioning profiles через зашифрований Git-репозиторій. Gym — збірка та архівування iOS-додатку (обгортка над xcodebuild). Pilot — завантаження та керування збірками в TestFlight. Deliver — завантаження додатку та метаданих в App Store Connect. Snapshot — автоматичне створення скріншотів на всіх мовах. Screengrab — автоматичне створення скріншотів для Android.
Приклад Fastfile для Android: lane :beta викликає gradle (assembleRelease), потім firebase_app_distribution для поширення тестувальникам. Для iOS: lane :beta викликає match (завантаження сертифікатів), gym (архівування) та pilot (завантаження в TestFlight). Fastlane може запускатися локально та на CI-сервері — це робить його універсальним інструментом у будь-якому мобільному проекті.
Canary Release — стратегія CI/CD автоматизації викатки нової версії додатку на невелику частину користувачів (1–5%) перед повним релізом. У Google Play Console це реалізовано через Staged Rollout: ви випускаєте оновлення на 5% аудиторії, моніторите краші та метрики, і при відсутності проблем збільшуєте відсоток. В App Store Connect — через Phased Release for Automatic Updates.
A/B Testing — порівняння двох версій однієї функції на випадкових групах користувачів. У мобільній розробці A/B-тести проводяться через Feature Flags, Firebase Remote Config або серверну логіку. Canary Release та A/B-тести дозволяють мінімізувати ризики при викладці нових функцій.
Feature Flag (Feature Toggle) — умовне включення функціональності без розгортання нового коду. Feature Flag — це перевірка в коді: if (featureFlag.isEnabled()) { /* новий код */ } else { /* старий код */ }. Флаги керуються через сервіси: LaunchDarkly, Split.io, Firebase Remote Config. Feature Flags дозволяють розробникам мержити код в main, навіть якщо функція ще не готова до показу користувачам.
LaunchDarkly — найпопулярніша платформа керування Feature Flags. LaunchDarkly надає SDK для iOS, Android, Flutter та React Native. Можна вмикати функції для конкретних користувачів, сегментів, регіонів або відсотка аудиторії. Feature Flags також використовуються для kill switch — миттєвого відключення проблемної функції без релізу нової версії додатку.
Часто задавані питання
Почніть з GitHub Actions — якщо ваш код на GitHub. Actions безкоштовний для публічних репозиторіїв, має вбудовану підтримку Android та iOS (macOS runners), і величезну екосистему готових actions. Для мобільної спеціалізації — Bitrise.
Ні, CI-сервіси (GitHub Actions, Bitrise, CircleCI) надають macOS-раннери. Ви платите за хвилини використання. Для локального налагодження Fastlane потрібен Mac, але CI може працювати і в хмарі.
Canary Release — викатка нової версії на частину користувачів для перевірки стабільності. A/B-тест — порівняння двох варіантів однієї функції для вибору кращого. Canary — про надійність, A/B — про конверсію.
Fastlane не обов'язковий, але настійно рекомендується. Без Fastlane ви будете вручну запускати xcodebuild, керувати сертифікатами та завантажувати збірки через веб-інтерфейс. Fastlane автоматизує всі ці завдання однією командою.
Match — інструмент Fastlane для керування Code Signing сертифікатами iOS. Match зберігає сертифікати та provisioning profiles в зашифрованому Git-репозиторії та синхронізує їх між всіма розробниками та CI-сервером.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.