CircleCI — це хмарна CI/CD платформа для автоматизації збірки, тестування та розгортання програмного забезпечення, включаючи мобільні додатки для iOS та Android. За даними CircleCI, 2024, платформа обробляє понад 30 мільйонів збірок щомісяця та пропонує унікальну архітектуру на основі orbs — готових пакетів конфігурації для популярних інструментів.
Головне
CircleCI — це хмарна CI/CD платформа, заснована в 2011 році. Система дозволяє описувати пайплайни в YAML-файлі .circleci/config.yml та виконувати їх в ізольованих контейнерах або віртуальних машинах. CircleCI підтримує всі популярні мови та платформи, включаючи Android, iOS, Flutter та React Native.
Для мобільної розробки CircleCI пропонує macOS виконавці для iOS-збірки з попередньо встановленим Xcode, Linux виконавці для Android з Android SDK, а також кешування Gradle та CocoaPods. Ключова особливість — orbs, які дозволяють підключати готові конфігурації одним рядком: orb: android, orb: ios, orb: flutter. CircleCI автоматично визначає тип проєкту та пропонує шаблонну конфігурацію при першому підключенні репозиторію.
Платформа підтримує SSH-доступ до запущених контейнерів для налагодження — корисна функція при розборі невдалих збірок. CircleCI CLI дозволяє локально перевіряти та запускати конфігурації, керувати orbs та переглядати логи. Платформа інтегрується з GitHub, GitHub Enterprise, Bitbucket та GitLab через систему webhooks.
Архітектура CircleCI включає три рівні: Pipeline, Workflow та Job. Pipeline — це кореневий процес, що тригерується при коміті. Pipeline складається з Workflows — графа Jobs, які можуть виконуватися послідовно або паралельно. Кожна Job виконується на Executor — середовищі з певним образом. Workflow може включати approval gates — ручне підтвердження перед розгортанням.
Orbs — це багаторазово використовувані пакети YAML-конфігурації, що поширюються через CircleCI Orb Registry. Orb може містити jobs, commands, executors та приклади. Популярні orbs: android, ios, flutter, firebase, slack. Наприклад, підключення android orb замінює 50+ рядків конфігурації на один рядок. CircleCI CLI дозволяє створювати, тестувати та публікувати власні orbs для стандартизації пайплайнів в організації.
| Executor | Підходить для | Середовище збірки |
|---|---|---|
| Docker | Android, Backend | Linux контейнер |
| macOS | iOS, macOS | macOS VM з Xcode |
| Machine | Docker-in-Docker | Ubuntu VM |
| Windows | .NET, WinUI | Windows Server |
Contexts — це іменовані набори змінних середовища, доступні на рівні організації. Наприклад, контекст app-store-credentials містить Apple ID та пароль для публікації в App Store. Це спрощує керування secrets між проєктами без дублювання.
Для Android-проєкту CircleCI використовує Docker-образ cibuilds/android з Android SDK. Типовий workflow включає: checkout, встановлення JDK, кешування Gradle, збірку, запуск тестів. Для iOS потрібен macOS виконавець з Xcode та налаштуванням code signing. При першому підключенні CircleCI автоматично визначає тип проєкту та генерує базову конфігурацію з рекомендованими налаштуваннями.
Для Flutter-проєктів CircleCI надає orb circleci/flutter, який включає виконавців з попередньо встановленим Flutter SDK для Linux та macOS. Orb підтримує збірку для обох платформ, кешування pub-cache та запуск тестів. Налаштування зводиться до вказівки версії Flutter та команд збірки. Для кастомних версій Flutter або Dart можна використовувати Docker-образ з необхідним SDK. Flutter orb також підтримує розширені опції — наприклад, аналіз коду через dart analyze перед збіркою.
Android orb від CircleCI надає готові jobs: build-and-test, deploy-to-play-store. Orb автоматично налаштовує середовище, кешування та підпис. Після підключення orb достатньо вказати версію SDK та команди збірки.
Для iOS-збірки вказується executor: macos з версією Xcode. CircleCI надає образи з Xcode 14, 15 та 16. Після checkout код компілюється через xcodebuild, тести запускаються на симуляторі. Code signing налаштовується через fastlane match або ручне встановлення сертифікатів.
Кешування — ключовий елемент продуктивності CircleCI. Механізм cache зберігає директорії між запусками workflow за ключем. Для Gradle кешується ~/.gradle, для CocoaPods — Pods/, для npm/SPM — node_modules/.build. При зміні lock-файлу кеш автоматично оновлюється. CircleCI підтримує окремі політики: save_cache може бути відкладеним (when: always), а restore_cache — обов'язковим.
Parallelism у поєднанні з resource class дозволяє точно налаштовувати продуктивність збірки. Resource class визначає кількість CPU та RAM для контейнера: small (1 CPU, 2 GB), medium (2 CPU, 4 GB), medium+ (3 CPU, 5 GB) та large (4 CPU, 8 GB). Для iOS-збірок з Xcode рекомендується використовувати macOS executor з resource class medium або larger — компіляція Swift-коду потребує значних ресурсів.
Parallelism розділяє тести на кілька контейнерів, скорочуючи час прогону. Наприклад: parallelism: 4 запускає тести в 4 паралельних контейнерах. CircleCI автоматично розподіляє тестові файли по контейнерах. Команда circleci tests glob збирає список тестів, а circleci tests split розподіляє їх рівномірно.
- restore_cache:
keys:
- v1-gradle-{{ checksum "build.gradle" }}
- v1-gradle-
- run: ./gradlew assembleDebug
- save_cache:
key: v1-gradle-{{ checksum "build.gradle" }}
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
Розглянемо повну конфігурацію CircleCI для Android-проєкту з двома job: build та test. Конфігурація включає Docker executor з Android SDK, кешування Gradle та паралельний запуск тестів. Artifacts зберігаються для завантаження. Workflow build-and-test запускає обидва job при кожному push в основну гілку.
version: 2.1
orbs:
android: circleci/android@2.5.0
jobs:
build:
executor: android/default
steps:
- checkout
- android/restore-gradle-cache
- run: ./gradlew assembleRelease
- android/save-gradle-cache
- store_artifacts:
path: app/build/outputs/apk/release
- store_test_results:
path: app/build/reports/tests
test:
executor: android/default
parallelism: 4
steps:
- checkout
- android/restore-gradle-cache
- run:
command: |
cd app
./gradlew test
workflows:
version: 2
build-and-test:
jobs:
- build
- test
При виборі між CircleCI та альтернативами — якщо команда використовує GitHub, GitHub Actions може бути простішим вибором. CircleCI кращий для команд, яким потрібне гнучке паралельне виконання тестів, кастомізація executor environment та детальна статистика збірок. CircleCI Insights надає дашборд з метриками продуктивності пайплайнів: середній час збірки, тренди та вузькі місця. Insights допомагає виявляти jobs з тривалим виконанням та оптимізувати їх. CircleCI API дозволяє програмно керувати пайплайнами, запускати збірки та отримувати метрики.
Для безпечної роботи з secrets CircleCI підтримує Contexts — іменовані набори змінних середовища на рівні організації. Contexts захищені рольовим доступом: лише певні команди можуть використовувати конкретний context. Наприклад, context production-deploy містить ключі App Store Connect та доступний лише провідним розробникам. У поєднанні з approval gates це формує повноцінну систему безпеки CI/CD.
CircleCI Orb Registry містить сотні готових пакетів для різних завдань CI/CD. Для мобільної розробки ключові orbs включають: circleci/android, circleci/ios, circleci/flutter, laurencerussell/firebase-app-distribution. Кожен orb версіонується та документується. Orbs можуть бути публічними (доступні всім) та приватними (тільки для вашої організації).
Використання orbs скорочує конфігурацію в 5–10 разів. Наприклад, orb circleci/android надає виконавець android/default з попередньо встановленим SDK та команди restore-gradle-cache, save-gradle-cache. Orb circleci/ios включає виконавець з Xcode та команди для code signing через fastlane. Orbs можна легко комбінувати: підключити android orb для збірки та slack orb для сповіщень.
CircleCI також пропонує вбудовану підтримку тестових звітів. Store_test_results автоматично парсить та візуалізує результати тестів JUnit, XCTest та інших форматів. Для мобільних проєктів це означає централізований перегляд невдалих тестів, трендів часу виконання та історії стабільності збірок, що спрощує підтримку якості коду.
orbs:
ios: circleci/ios@2.0.0
jobs:
build-and-test:
executor: ios/default
steps:
- checkout
- ios/install-dependencies
- ios/build-and-test
Публікація кастомного orb доступна через CircleCI CLI. Команди circleci orb create та circleci orb publish завантажують orb до реєстру. Це корисно для стандартизації CI/CD всередині організації — створюється один раз, використовується у всіх проєктах.
Поширені запитання
CircleCI пропонує безкоштовний план з 6000 хвилин на місяць для одного контейнера. Performance Plan ($30/міс) включає 10 паралельних jobs та 14000 хвилин. Scale Plan — індивідуальні ціни з необмеженою паралельністю.
Orbs — це багаторазово використовувані YAML-пакети конфігурації CircleCI, що поширюються через офіційний реєстр. Вони містять готові jobs, commands та executors для популярних інструментів та платформ.
Так, CircleCI підтримує macOS executor з попередньо встановленим Xcode (версії 14, 15, 16). Доступні образи для iOS 17 та 18, watchOS, tvOS. Code signing налаштовується через fastlane match або вручну.
Вкажіть parallelism: N в job — CircleCI розділить тести на N контейнерів. Команда circleci tests split розподіляє тести рівномірно. Тести виконуються паралельно, загальний час скорочується пропорційно кількості контейнерів.
CircleCI пропонує більш гнучкі виконавці (Docker, macOS, Machine, Windows), розвинену систему orbs, вбудований parallel test splitting та детальні артефакти збірки. GitHub Actions виграє в інтеграції з GitHub та простоті.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також