Налаштування CI/CD для мобільного додатку через Jenkins під ключ

Вступ Годинна ручна збірка мобільного додатку з подальшим завантаженням в App Store або Google Play — знайомий біль для кожної команди. Ми стикаємося з цим постійно: розробник відволікається від фіч, щоб зібрати реліз, а потім ще півдня чекати, поки тестувальники перевірять і погодять. Jenkins ви

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування CI/CD для мобільного додатку через Jenkins під ключ
Складний
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Вступ

Годинна ручна збірка мобільного додатку з подальшим завантаженням в App Store або Google Play — знайомий біль для кожної команди. Ми стикаємося з цим постійно: розробник відволікається від фіч, щоб зібрати реліз, а потім ще півдня чекати, поки тестувальники перевірять і погодять. Jenkins вирішує цю проблему раз і назавжди. Автоматизація у нас під ключ — від налаштування агентів до деплою — і результат ви побачите вже через 1–2 тижні. Зв'яжіться з нами для оцінки вашого проекту.

Чому Jenkins для мобільної розробки?

Jenkins обирають, коли потрібен повний контроль над інфраструктурою, вже є on-premise Jenkins-сервер в компанії, або вимоги безпеки забороняють передачу коду в хмарні CI-системи. Для мобільної розробки це означає: Linux-мастер для Android, macOS-агент для iOS. На відміну від хмарних CI (GitHub Actions, GitLab CI), Jenkins в 2 рази дешевший при великій кількості збірок завдяки відсутності білінгу за хвилини роботи агентів.

Як налаштувати macOS-агент для iOS збірок?

Покрокова інструкція з налаштування агента:

  1. Встановіть Xcode 16 та Command Line Tools на Mac.
  2. Налаштуйте Keychain з сертифікатами code signing (переконайтеся, що Keychain розблокований).
  3. Встановіть fastlane через gem install fastlane або brew install fastlane.
  4. Налаштуйте CocoaPods або Swift Package Manager (залежності будуть кешуватися).
  5. Підключіть агент до Jenkins Controller через SSH (режим LaunchDaemons не підходить — використовуйте launchctl для GUI-сесії).
  6. Додайте stage 'Unlock Keychain' в Jenkinsfile (див. нижче).

Архітектура Jenkins для мобільної розробки

Jenkins Controller (Linux/macOS) ├── macOS Agent (для iOS) │ ├── Xcode 16 │ ├── fastlane │ └── CocoaPods / SPM └── Linux Agent (для Android) ├── JDK 17 ├── Android SDK └── Gradle 

Агенти підключаються по SSH (Launch agents via SSH) або через JNLP. Для macOS-агента — обов'язково акаунт з Keychain-доступом до code signing сертифікатів.

Jenkinsfile: декларативний pipeline

pipeline { agent none environment { FASTLANE_SKIP_UPDATE_CHECK = 'true' MATCH_PASSWORD = credentials('match-passphrase') FIREBASE_TOKEN = credentials('firebase-cli-token') } stages { stage('Test iOS') { agent { label 'macos-m2' } steps { checkout scm sh 'bundle install --path vendor/bundle' sh 'bundle exec fastlane test' } post { always { junit 'fastlane/test_output/report.junit' } } } stage('Build iOS Beta') { agent { label 'macos-m2' } when { branch 'main' } steps { sh 'bundle exec fastlane beta' } } stage('Build Android') { agent { label 'linux-android' } steps { checkout scm sh './gradlew test assembleRelease' archiveArtifacts artifacts: 'app/build/outputs/apk/release/*.apk' } } } post { failure { slackSend( channel: '#mobile-ci', color: 'danger', message: "Build failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}" ) } } } 

credentials('match-passphrase') — Jenkins Credentials Store. Секрети не зберігаються в Jenkinsfile, тільки посилання на ID.

Як уникнути проблем з Keychain на macOS-агенті?

Головний біль Jenkins + iOS: при запуску як фоновий daemon codesign не може відкрити Keychain без unlock. Рішення — unlock на початку пайплайну:

stage('Unlock Keychain') { agent { label 'macos-m2' } environment { KEYCHAIN_PASSWORD = credentials('macos-keychain-password') } steps { sh 'security unlock-keychain -p $KEYCHAIN_PASSWORD ~/Library/Keychains/login.keychain-db' sh 'security set-keychain-settings -lut 3600 ~/Library/Keychains/login.keychain-db' } } 

set-keychain-settings -lut 3600 — keychain не блокується 1 годину (достатньо для збірки). Без цього через 5 хвилин idle keychain блокується автоматично і codesign отримує errSecInteractionNotAllowed. Це одна з найчастіших помилок, яку ми виправляємо в 90% наших проектів.

Кешування артефактів

Jenkins не має вбудованого розумного кешу як GitHub Actions cache. Варіанти:

Метод Опис Коли підходить
Shared directory на агенті ~/.gradle або ~/Library/Caches/CocoaPods зберігається між збірками При використанні sticky agents
Workspace Caching Plugin Кешує по хешу Podfile.lock/build.gradle Для невеликих команд
Nexus/Artifactory Enterprise-кеш Maven/Gradle залежностей Для великих проектів з високими вимогами до надійності

Shared directory на агенті. Папка ~/.gradle або ~/Library/Caches/CocoaPods зберігається між збірками автоматично — якщо завжди використовується той самий агент (sticky agent).

Jenkins Workspace Caching Plugin. Кешує по хешу Podfile.lock/build.gradle, аналог GitHub Actions cache.

Artifactory/Nexus. Для enterprise — кеш Maven/Gradle залежностей через внутрішній артифакторій. GRADLE_USER_HOME=~/.gradle + дзеркало Nexus.

Що дає паралельний запуск тестів?

stage('Test Parallel') { parallel { stage('iOS Tests') { agent { label 'macos-m2' } steps { sh 'bundle exec fastlane test' } } stage('Android Tests') { agent { label 'linux-android' } steps { sh './gradlew test' } } } } 

Паралельний прогін iOS та Android тестів скорочує загальний час з ~20 до ~12 хвилин. Економія 8 хвилин на кожній збірці — при 2 збірках на день це 40 хвилин на тиждень, що при годинній ставці розробника 4000 рублів дає економію 3200 рублів на тиждень на одному проекті.

Що входить в роботу

При замовленні налаштування CI/CD під ключ ви отримуєте:

Deliverable Опис
Документація Опис архітектури, Jenkinsfile, інструкція для розробників
Агенти macOS та Linux агенти, налаштовані з потрібними інструментами
Безпека Keychain, provisioning profiles, сертифікати в Jenkins Credentials
Пайплайни Test, build, deploy для iOS та Android, паралельні стадії
Інтеграції Slack/Jira сповіщення, Firebase App Distribution, TestFlight
Навчання команди 2 години воркшопу з підтримки та доробки пайплайнів
Підтримка 2 тижні після здачі для стабілізації

Типові помилки

  • xcodebuild не знаходить симулятор — потрібно явно вказувати xcrun simctl boot "iPhone 16" перед запуском тестів на новому агенті
  • Gradle wrapper не знайдено — потрібен chmod +x gradlew на початку кроку
  • Build number конфліктує при паралельних збірках — використовуємо ${env.BUILD_NUMBER} як суфікс

Строки

Налаштування Jenkins Pipeline з macOS + Linux агентами, test + deploy лейнами: 1–2 тижні (включаючи агентів). Підтримка паралельних збірок, інтеграція з Slack/Jira, налаштування Artifactory: ще 1 тиждень. Вартість розраховується індивідуально.

За 5 років ми налаштували CI/CD для 40+ мобільних проектів — від стартапів до enterprise. Отримайте консультацію: оцінимо ваш проект і розкажемо, скільки часу заощадить автоматизація. Замовте налаштування пайплайну під ключ — напишіть нам.