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 приложения. Платформата работи в облака и предоставя собствени хоствани runners с macOS и Linux. Bitrise поддържа всички популярни мобилни стекове: Swift, Kotlin, Flutter, React Native, Cordova и Xamarin.
Основното предимство на Bitrise са предварително конфигурираните Step шаблони за типични задачи в мобилното развитие: Xcode build, Gradle assemble, Fastlane, Firebase Distribution, TestFlight, Google Play. Конфигурирането на пайплайн отнема минути чрез визуалния редактор, а YAML конфигурацията се генерира автоматично във файла bitrise.yml. За напреднали потребители е наличен YAML редактор с автоматично довършване.
Архитектурата на Bitrise се основава на две ключови понятия: Workflow и Step. Workflow е последователност от Steps, определяща пайплайна. Всеки проект може да има множество Workflows: primary (основно изграждане), deploy (публикуване), test (само тестове). Workflow се задейства от тригери: 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 — обединяване на множество Workflows в един пайплайн. Pipeline може да включва основно изграждане за всички платформи и отделни работни потоци за внедряване и тестване. Това позволява създаването на сложни 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 profiles в криптиран вид, автоматично ги инсталира в подходящия 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 runners за 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също