GitHub Actions — это встроенная в GitHub платформа CI/CD и автоматизации, которая позволяет запускать сборку, тестирование и деплой мобильных приложений прямо из репозитория. По данным GitHub, 2024, платформа включает более 15 000 готовых actions в маркетплейсе, покрывающих все этапы разработки от линтинга до публикации в магазинах приложений.
Главное
GitHub Actions — это платформа автоматизации рабочих процессов, встроенная в GitHub и запущенная в 2019 году. Она позволяет определять пайплайны CI/CD в YAML-файлах, которые хранятся непосредственно в репозитории. Каждый workflow запускается по триггеру: push, pull request, создание тега или по расписанию. В отличие от Jenkins или TeamCity, не требуется отдельная инфраструктура для хостинга CI-сервера.
В контексте мобильной разработки GitHub Actions автоматизирует сборку APK и IPA, запуск unit-тестов и UI-тестов на эмуляторах, проверку кода линтерами, подпись и публикацию в Google Play и App Store. Платформа предоставляет бесплатные минуты для публичных репозиториев и для приватных — в зависимости от тарифного плана. Для open-source мобильных проектов это полноценное CI/CD-решение без затрат.
Архитектура GitHub Actions состоит из четырёх уровней. Workflow — это корневой YAML-файл, определяющий автоматизацию. Workflow состоит из Jobs, каждый Job выполняется на отдельном Runner. Внутри Job выполняются Steps — последовательные команды или внешние actions. Events определяют триггеры запуска: push, pull_request, schedule, workflow_dispatch. Workflow может быть также вызван вручную через вкладку Actions в интерфейсе GitHub.
GitHub предоставляет хостируемые runners с предустановленными ОС: Ubuntu, macOS и Windows. Для iOS-сборки обязателен macOS-runner, для Android — Linux или macOS. Self-hosted runners позволяют запускать jobs на собственных серверах с кастомным окружением, что полезно для крупных проектов с особыми требованиями к аппаратному обеспечению. GitHub также поддерживает группы self-hosted runners для организации очереди выполнения jobs.
Базовый workflow-файл содержит секции: name, on (триггеры), jobs. Каждый job указывает runs-on (тип runner), strategy (матрица), steps (список действий). Steps могут быть командами shell или готовыми actions из маркетплейса, подключаемыми через синтаксис owner/repo@version.
Для Android-сборки workflow типично включает шаги: checkout репозитория, установка JDK, настройка Gradle-кеша, запуск assembleRelease. Для iOS требуется macOS-runner, установка Xcode через xcode-select, разрешение provisioning profile и запуск xcodebuild. Сложность iOS-сборки связана с code signing и управлением сертификатами. Apple-специфичные настройки включают управление provisioning profile через apple-actions/import-codesign-certs.
Matrix strategy позволяет запускать сборку на нескольких версиях одновременно. Например: matrix с версиями iOS (15.0, 16.0, 17.0) и Xcode (14, 15). Это ускоряет верификацию совместимости приложения с разными версиями ОС, хотя и увеличивает потребление минут runners. Для проектов с ограниченным CI-бюджетом можно ограничить matrix только основными конфигурациями.
GitHub Actions предоставляет action setup-java для установки JDK и caching для кеширования Gradle. Android SDK уже предустановлен на Ubuntu-раннерах. Для кастомных API-уровней используется sdkmanager в отдельном step. Рекомендуется создавать отдельный workflow для сборки Android и iOS, так как они используют разные runners и инструменты сборки.
GitHub Marketplace содержит более 15 000 actions, созданных сообществом и официальными разработчиками. Для мобильной разработки ключевые категории: Code signing (apple-actions/import-codesign-certs), тестирование (react-native-community/action), деплой (google-github-actions/release-google-play), уведомления (slackapi/slack-github-action). Также доступны action для Firebase App Distribution, TestFlight upload и Fastlane. Каждый action имеет метку совместимости с конкретной ОС runner.
Каждый action имеет версию, описание, README и лицензию. При выборе action предпочтительны официальные от вендоров (Google, Apple, Microsoft) и проверенные через Verified Badge. Важно указывать фиксированную мажорную версию (actions/checkout@v4), а не @main, чтобы избежать неожиданных изменений. Если нужного action нет в Marketplace, можно создать кастомный action — локально в репозитории (Docker action или JavaScript action) или опубликовать в Marketplace.
При разработке iOS-приложений важно настроить корректную работу с симуляторами и устройствами. macOS-14 runner предоставляет среду с Rosetta 2 для запуска Intel-сборок на ARM архитектуре. Workflow может включать несколько схем сборки — Debug для pull request и Release для тегов. GitHub Actions поддерживает xcresult parsing через action xcparse/sonarqube для отображения результатов тестов. Для отправки уведомлений о статусе сборки можно добавить Slack или Telegram action.
Code signing для iOS требует импорта сертификатов и provisioning profiles. Apple-actions предоставляют step для импорта P12 сертификата и установки provisioning profile. Сертификаты хранятся как secrets GitHub Actions и расшифровываются только на этапе сборки. Для автоматизации подписи используется Fastlane match, который может быть вызван как отдельный step в workflow.
Рассмотрим workflow для iOS-приложения на Swift, который собирает проект, запускает тесты и создаёт архивированную сборку. Workflow использует macOS-14 runner, Xcode 15.4 и actions для управления сертификатами.
name: iOS CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_15_4.app
- name: Install CocoaPods
run: pod install
- name: Build and test
run: xcodebuild clean test -workspace App.xcworkspace
-scheme App -sdk iphonesimulator
- name: Archive
run: xcodebuild archive -workspace App.xcworkspace
-scheme App -archivePath App.xcarchive
Кеширование сокращает время сборки, сохраняя зависимости между запусками workflow. GitHub предоставляет встроенное кеширование через actions/cache. Для Gradle кешируется ~/.gradle, для CocoaPods — Pods/, для SPM — .build/. Ключ кеша включает хеш файла со списком зависимостей — при изменении зависимостей кеш автоматически инвалидируется.
Особое внимание стоит уделить стратегии восстановления кеша (restore-keys). Если точный ключ не найден, GitHub Actions пробует частичное совпадение по restore-keys. Это полезно, когда меняется только одна зависимость — кеш остаётся частично пригодным. Для Gradle дополнительно рекомендуется включить Gradle Build Cache, который кеширует результаты сборки между разными модулями проекта.
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle*') }}
Эффективность кеширования для Android-проектов: первая сборка без кеша — 8–12 минут, повторная с кешем — 2–4 минуты. Для iOS с CocoaPods экономия аналогична. Рекомендуется комбинировать actions/cache с setup-gradle action от Gradle для оптимального управления кешами. Для npm-зависимостей React Native используется actions/cache с хешированием package-lock.json. При правильной настройке кеширования можно добиться сокращения времени сборки до 70%.
GitHub Actions поддерживает переменные окружения на уровне workflow, job и step. Переменные окружения можно переопределять: step-level имеет наивысший приоритет. Для конфиденциальных данных всегда используйте secrets — они зашифрованы AES-256 и не отображаются в логах. Также доступны environment protection rules — обязательное ручное подтверждение перед запуском деплоя. Для дополнительной безопасности можно настроить обязательное approval от определённых пользователей или команд.
GitHub Actions также поддерживает Reusable Workflows — переиспользуемые пайплайны, которые можно вызывать из других workflow. Это позволяет создать централизованный workflow сборки и переиспользовать его во всех репозиториях организации. Reusable workflow вызывается одной строкой и может принимать входные параметры и secrets. Это особенно полезно для стандартизации CI/CD практик в крупных командах.
При настройке GitHub Actions для мобильных проектов важно следовать принципам безопасности. OIDC (OpenID Connect) позволяет отказаться от долгоживущих credentials и получать временные токены для облачных провайдеров. Никогда не используйте plain-text secrets в скриптах — GitHub Actions автоматически маскирует secrets в логах.
Для мобильных проектов критически важно ограничить доступ к workflow для сторонних fork. Используйте настройку pull_request_target с осторожностью — она выполняет код из базовой ветки, а не из fork. Для code signing iOS-приложений рекомендуется хранить сертификаты в зашифрованном виде и расшифровывать их только на этапе сборки через gpg или openssl.
Часто задаваемые вопросы
Для публичных репозиториев GitHub Actions бесплатен с ограничением 2000 минут в месяц. Для приватных репозиториев на бесплатном плане — 500 минут. Team и Enterprise планы включают 3000 и 50000 минут соответственно.
Для iOS-сборки требуется macOS-runner (macos-13, macos-14 или macos-latest). Только на macOS доступны Xcode и инструменты code signing для iOS. Android-сборка может выполняться как на Linux, так и на macOS.
Secrets настраиваются в Settings → Secrets and variables → Actions репозитория. В workflow используются синтаксисом ${{ secrets.MY_SECRET }}. Secrets зашифрованы и не выводятся в логи — они доступны только во время выполнения workflow.
Да, через утилиту act от сообщества. Она запускает workflow локально в Docker-контейнерах. Это полезно для отладки перед коммитом, но macOS-специфичные steps (Xcode-сборка) не поддерживаются.
Используйте фильтр paths в секции on: push: paths: ["src/**", "*.gradle"]. Workflow будет запускаться только при изменениях в указанных директориях. Обратный фильтр paths-ignore исключает пути.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также