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 executor-e за iOS изградњу са пред-инсталираним Xcode, Linux executor-e за 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, executor-e и примере. Популарни 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. Ово поједностављује управљање тајнама између пројеката без дуплирања.
За Android пројекат, CircleCI користи Docker слику cibuilds/android са Android SDK. Типичан workflow укључује: checkout, инсталацију JDK, кеширање Gradle-а, изградњу, покретање тестова. За iOS је потребан macOS executor са Xcode и подешавањем code signing-а. При првом повезивању, CircleCI аутоматски одређује тип пројекта и генерише основну конфигурацију са препорученим подешавањима.
За Flutter пројекте, CircleCI нуди orb circleci/flutter, који укључује executor-е са пред-инсталираним 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 датотеке, cache се аутоматски ажурира. 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 је пожељнији за тимове којима је потребно флексибилно parallel test execution, прилагођавање executor окружења и детаљна статистика изградњи. CircleCI Insights пружа контролну таблу са метрикама перформанси пајплајнова: просечно време изградње, трендови и уска грла. Insights помаже у идентификовању job-ова са дугим извршавањем и њиховој оптимизацији. CircleCI API омогућава програмско управљање пајплајновима, покретање изградњи и добијање метрика.
За безбедан рад са тајнама, CircleCI подржава Contexts — именоване скупове променљивих окружења на нивоу организације. Contexts су заштићени контролом приступа на основу улога: само одређени тимови могу користити одређени context. На пример, context production-deploy садржи App Store Connect кључеве и доступан је само lead програмерима. У комбинацији са 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 обезбеђује executor android/default са пред-инсталираним SDK-ом и команде restore-gradle-cache, save-gradle-cache. Orb circleci/ios укључује executor са 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 паралелних job-ова и 14000 минута. Scale Plan — индивидуалне цене са неограниченом паралелношћу.
Orbs — су YAML пакети за вишекратну употребу CircleCI конфигурације, дистрибуирани путем званичног регистра. Садрже готове jobs, commands и executor-е за популарне алате и платформе.
Да, 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 нуди флексибилније executor-е (Docker, macOS, Machine, Windows), напредни систем orbs-а, уграђено parallel test splitting и детаљне артефакте изградње. GitHub Actions предњачи у интеграцији са GitHub-ом и једноставности.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође