Bitrise је специјализована CI/CD платформа за мобилни развој, изграђена око готових Steps — претходно конфигурисаних модула за прављење, потписивање и објављивање iOS и Android апликација. Према подацима Bitrise, 2024, платформа подржава више од 400 готових Steps и интегрише се са Xcode, Gradle, Fastlane, Firebase и App Store Connect.
Главне ствари
Bitrise је CI/CD платформа покренута 2016. године, потпуно фокусирана на мобилни развој. За разлику од универзалних решења GitHub Actions и GitLab CI, Bitrise је од почетка пројектована за аутоматизацију прављења iOS и Android апликација. Платформа ради у облаку и пружа сопствене хостоване runner-е са macOS и Linux-ом. Bitrise подржава све популарне мобилне стекове: Swift, Kotlin, Flutter, React Native, Cordova и Xamarin.
Главна предност Bitrise су претходно конфигурисани Step шаблони за типичне задатке мобилног развоја: Xcode build, Gradle assemble, Fastlane, Firebase Distribution, TestFlight, Google Play. Подешавање pipeline-а траје минуте путем визуелног уређивача, а YAML конфигурација се аутоматски генерише у датотеци bitrise.yml. За искусне кориснике доступан је YAML уређивач са аутоматским допуњавањем.
Архитектура Bitrise се заснива на два кључна концепта: Workflow и Step. Workflow је низ Steps који дефинише pipeline. Сваки пројекат може имати више Workflow-ова: primary (главно прављење), deploy (објављивање), test (само тестови). Workflow се покреће на основу trigger-а: push, PR, tag или по распореду. Workflow се може покренути ручно из веб интерфејса, што је корисно за ad-hoc прављења.
Step је атомски модул који извршава један задатак. Кораци се могу превлачити у визуелном уређивачу, мењати им редослед и конфигурацију. Bitrise пружа Steps за Xcode Archive & Export, Gradle Runner, CocoaPods Install, Firebase Distribution, Slack обавештења. Заједница такође креира Steps — они су доступни преко Step Library. Сваки Step има обавезне и опционе улазне параметре, као и излазне променљиве које могу користити наредни Steps.
Bitrise подржава концепт Pipeline — обједињавање више Workflow-ова у један pipeline. Pipeline може укључивати главно прављење за све платформе и посебне workflow-ове за имплементацију и тестирање. Ово омогућава стварање сложених CI/CD процеса где једно прављење покреће друго. Stacks Bitrise одређују претходно инсталирани софтвер на runner-у: Xcode, Android SDK, Flutter, Node.js и друге алате.
Bitrise се интегрише са GitHub, GitLab, Bitbucket и Azure DevOps. Приликом повезивања репозиторијума, Bitrise аутоматски открива тип пројекта (iOS, Android, Flutter) и предлаже шаблон Workflow-а. За приватне репозиторијуме, Bitrise захтева приступ преко OAuth или SSH кључа. Подржано је повезивање више репозиторијума на једну апликацију.
Након повезивања, Bitrise креира webhook у репозиторијуму за аутоматско покретање прављења при push и PR. Свако прављење добија јединствени број, логине и артефакте. Интерфејс омогућава преглед историје прављења, поређење промена и поновно покретање неуспелих прављења. Bitrise такође подржава заказана прављења за редовна ноћна прављења и интеграцију са Jira-ом за праћење комитова.
Code signing за iOS је један од најсложенијих задатака CI/CD, а Bitrise га решава изузетно једноставно. Платформа чува сертификате и provisioning profile-ове у шифрованом облику, аутоматски их инсталира у одговарајући keychain пре прављења и извози потписани IPA. Step Certificate and Profile Installer преузима датотеке из складишта Bitrise и конфигурише Xcode. Подржани су типови сертификата Development, AdHoc, AppStore и Enterprise.
За објављивање у App Store Connect, Bitrise пружа Steps за отпремање IPA-е преко Xcode Archive & Export. Објављивање у Google Play користи Gradle Runner са потписивањем преко Keystore-а, након чега се APK/AAB отпрема у Google Play Console преко Google Play Deploy Step-а. За Firebase App Distribution довољно је навести Firebase Token и групу тестера. Bitrise аутоматизује ажурирање верзија прављења (version number и build number) пре сваког објављивања.
Сертификати се отпремају у одељак Code Signing веб интерфејса: P12 са приватним кључем, provisioning profile (.mobileprovision), Keystore (.jks/.keystore) за Android. Bitrise аутоматски инсталира iOS сертификате у keychain при сваком покретању Workflow-а и извози потписану апликацију. За Android је довољно отпремити Keystore датотеку — Bitrise је прослеђује Gradle-у преко променљивих окружења приликом прављења.
Размотримо Workflow за Flutter апликацију који креира и објављује верзије за iOS и Android. Bitrise аутоматски открива Flutter пројекат и предлаже одговарајуће Steps. Workflow укључује инсталацију Flutter-а, кеширање pub-cache, прављење, тестирање и имплементацију. За iOS прављење додатно су потребни сертификати за code signing, које Bitrise учитава аутоматски.
Приликом прављења Flutter апликација, Bitrise подржава одвојену конфигурацију за платформе. Android прављење се извршава на Linux runner-у са Flutter SDK, iOS — на macOS runner-у. Workflow може укључивати условне Steps: build_android и build_ios, који се покрећу само на одговарајућим платформама. За React Native пројекте, Bitrise нуди сличан скуп Steps са npm/nvm и Metro bundler-ом.
format_version: 13
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
trigger_map:
- push_branch: main
workflow: primary
workflows:
primary:
steps:
- activate-ssh-key@4:
run_if: true
- git-clone@8: {}
- flutter-installer@0:
inputs:
- version: 3.24.0
- flutter-build@0:
inputs:
- platform: both
- ios_output_type: archive
- deploy-to-bitrise-io@2: {}
Након прављења може се додати Step Firebase App Distribution за iOS и Android. Step прима firebase_token, app_id и testers_group. Bitrise замењује вредности из Secrets-а — безбедно чување токена гарантује да неће доспети у логине.
- firebase-app-distribution@1:
inputs:
- firebase_token: $FIREBASE_TOKEN
- app_id: $FIREBASE_IOS_APP_ID
- testers_group: qa-team
- release_notes: |
Build $BITRISE_BUILD_NUMBER
Правилно управљање поверљивим подацима је основа безбедности CI/CD процеса. Bitrise Secrets су шифровани и недоступни за читање након чувања. Приликом креирања нове апликације, Bitrise предлаже увоз secrets-а из другог пројекта или ручно подешавање. За велике тимове доступна је функција Environment Groups — централизовано управљање променљивим и secrets-има за групу апликација.
Bitrise пружа уграђено складиште Secrets за поверљиве податке: API кључеви, Firebase токени, Keystore лозинке, Apple ID. Secrets се подешавају као парови кључ-вредност у веб интерфејсу и маскирају се у логима прављења. Доступни су на нивоу апликације и на нивоу Workflow-а. Secrets се не могу прочитати након чувања — могу се само преписати.
Environment Variables (без ознаке Secret) се користе за конфигурације: верзија Xcode-а, путања до пројекта, шема прављења. Променљиве окружења Bitrise (BITRISE_BUILD_NUMBER, BITRISE_APP_TITLE) пружају мета-информације о прављењу. Secrets се шифрују приликом чувања и дешифрују само на runner-у током извршавања Workflow-а. За групно управљање променљивим, Bitrise подржава Environment Groups — скупове променљивих који се могу применити на више апликација истовремено.
Управљање iOS сертификатима преко Bitrise заслужује посебну пажњу. Платформа аутоматски инсталира P12 и provisioning profile у системски keychain пре прављења. За Android се користи Keystore датотека која се отпрема у Code Signing секцију. Свака датотека сертификата се чува у шифрованом облику и дешифрује само током прављења.
- google-play-deploy@3:
inputs:
- package_name: com.example.app
- service_account_json_key: $SERVICE_ACCOUNT_KEY
- app_file: $BITRISE_APK_PATH
Bitrise нуди различите стекове (stack) за прављење — претходно инсталиране слике са алатима и SDK. Доступни су стекови за Xcode (верзије 14, 15, 16 са iOS SDK 17, 18), за Android (са различитим верзијама SDK и NDK), за Flutter, React Native и Kotlin Multiplatform. Сваки стек има опис претходно инсталираних алата и верзија.
Избор стека утиче на време прављења и компатибилност са пројектом. Bitrise редовно ажурира стекове, додајући нове верзије алата. Може се фиксирати одређена верзија стека у bitrise.yml да би се избегла неочекивана промене при ажурирању платформе. За прилагођене зависности користи се Script Step који инсталира потребне пакете пре главног прављења. Bitrise такође подржава Docker слике за Linux стекове, што омогућава коришћење прилагођеног окружења за Android прављења.
Често постављана питања
Bitrise нуди бесплатан план са 90 минута прављења месечно и једним concurrent build-ом. Developer (79$/мес) укључује 3000 минута, до 5 concurrent build-ова и све интеграције. Enterprise — индивидуалне цене.
Bitrise подржава iOS (Swift, Objective-C), Android (Kotlin, Java), Flutter, React Native, Cordova, Ionic и Xamarin. За сваку платформу постоје претходно инсталирани алати и шаблони Workflow-а.
Bitrise обезбеђује macOS runner-е за iOS прављење без додатног подешавања. Платформа сама управља macOS инфраструктуром — runner се бира аутоматски у зависности од стека апликације.
Bitrise чува сертификате у шифрованом облику и аутоматски их инсталира у keychain пре прављења путем Step-а Certificate and Profile Installer. За Android слично — Keystore се отпрема и користи га Gradle приликом потписивања.
Да, Bitrise подржава прилагођене Steps преко Script Step (bash скрипт) и прилагођене Step Library из GitHub-а. Такође можете креирати сопствени Step према Bitrise документацији и објавити га у Step Library.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође