Настройка GitHub Actions для непрерывной интеграции приложения на Kotlin Multiplatform
В этом руководстве приведён пример непрерывной интеграции приложения на Kotlin Multiplatform с помощью GitHub Actions. Вы настроите рабочий процесс, который запускает общие тесты и собирает артефакты для Android, iOS и настольных платформ при каждом отправлении изменений или запросе на слияние в ветку main.
Руководство основано на примере Jetcaster KMP. Вы можете посмотреть конфигурацию действий и рабочего процесса в репозитории или пошагово выполнить приведённые ниже инструкции.
В этом руководстве предлагается настроить CI в два этапа:
Повторно используемое составное действие GitHub Action для настройки Java и Gradle
Основной рабочий процесс GitHub Actions, который запускает тесты и сборки для конкретных платформ при каждом отправлении изменений или запросе на слияние в ветку
main.
Создание составного действия для настройки Gradle
Создайте составное действие, чтобы синхронизировать конфигурацию Java и Gradle между заданиями. Вы будете повторно использовать это действие в заданиях рабочего процесса, чтобы обеспечить одинаковую конфигурацию для всех сборок.
В этом примере действие устанавливает Java 17 и настраивает версию Gradle по умолчанию. Чтобы настроить действие, создайте файл .github/actions/gradle-setup/action.yml:
name: gradle-setup
description: Setup Java and Gradle
runs:
using: "composite"
steps:
- name: Setup Java
uses: actions/setup-java@v4.0.0
with:
java-version: "17"
distribution: "temurin"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5.0.0
Определение рабочего процесса сборки
Укажите, когда должен запускаться рабочий процесс, и настройте параметры Gradle:
Рабочий процесс должен запускаться при каждом отправлении изменений или запросе на слияние в ветку
main.В параметрах Gradle следует отключить демон Gradle и включить параллельное выполнение с кэшированием.
Создайте файл .github/workflows/build.yml с базовой конфигурацией:
name: Build
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
env:
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096M -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.caching=true"
Эта конфигурация также позволяет вручную запускать рабочий процесс с помощью workflow_dispatch.
Теперь можно добавить задания для запуска тестов и сборки артефактов приложения.
Запуск общих тестов
Это задание запускает тесты с помощью задачи Gradle jvmTest, чтобы проверить изменения перед сборкой приложения для всех платформ:
Получите копию репозитория, для которого нужно запустить тесты.
Используйте ранее подготовленное составное действие
gradle-setupдля настройки Java и Gradle.Запустите тесты с помощью команды
./gradlew.Загрузите отчёты о тестировании как артефакт из каталога
**/build/reports/tests/.
Чтобы настроить это задание, добавьте следующий код в файл .github/workflows/build.yml:
jobs:
test:
name: Run tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Gradle setup
uses: ./.github/actions/gradle-setup
- name: Run unit tests
run: ./gradlew jvmTest
- name: Upload test reports
uses: actions/upload-artifact@v4
with:
name: test-reports
path: "**/build/reports/tests/"
После запуска тестов рабочий процесс должен собрать артефакты приложения.
Сборка отладочного пакета для Android
Это задание собирает отладочный APK для Android с помощью задачи Gradle :mobile:assembleDebug:
Получите копию репозитория, из которого нужно собрать пакет.
Используйте ранее подготовленное составное действие
gradle-setupдля настройки Java и Gradle.Соберите APK с помощью команды
./gradlew.Загрузите собранный пакет из каталога
mobile/build/outputs/apk/debug/.
Добавьте следующий код в файл .github/workflows/build.yml, продолжив раздел jobs:
jobs:
# ...
build-android:
name: Build Android
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Gradle setup
uses: ./.github/actions/gradle-setup
- name: Build Android debug APK
run: ./gradlew :mobile:assembleDebug
- name: Upload Android debug APK
uses: actions/upload-artifact@v4
with:
name: android-apk
path: mobile/build/outputs/apk/debug/*.apk
Сборка приложения для симулятора iOS
Это задание предназначено для симулятора iOS, чтобы не пришлось настраивать подпись приложения. Приложение собирается с помощью xcodebuild:
Получите копию репозитория, из которого нужно собрать приложение.
Используйте ранее подготовленное составное действие
gradle-setupдля настройки Java и Gradle.Соберите приложение для iOS с помощью
xcodebuild— в примере показаны параметры, используемые для образца Jetcaster KMP.Загрузите папку с собранным приложением (всё содержимое
build/Build/Products/Debug-iphonesimulator/*) как артефакт.
Приложение для iOS собирается на исполнителе macOS (macos-latest), в состав которого входит xcodebuild.
Продолжите редактирование файла .github/workflows/build.yml:
jobs:
#...
build-ios:
name: Build iOS simulator app
runs-on: macos-latest
needs: test
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Gradle setup
uses: ./.github/actions/gradle-setup
- name: Build iOS simulator app
run: |
xcodebuild build \
-project JetcasterMigration/JetcasterMigration.xcodeproj \
-configuration Debug \
-scheme JetcasterMigration \
-sdk iphonesimulator \
-derivedDataPath ./build \
-verbose
- name: Upload app folder
uses: actions/upload-artifact@v4
with:
name: iphonesimulator-app
path: build/Build/Products/Debug-iphonesimulator/*
Отправка изменений и проверка CI
Рабочий процесс CI запустится впервые, когда вы отправите конфигурацию рабочего процесса в ветку main или создадите запрос на слияние с этими файлами конфигурации.
Чтобы проверить, что всё работает правильно, посмотрите результаты рабочего процесса на вкладке Действия в репозитории.
Помните, что рабочий процесс также можно запустить вручную: выберите его в списке действий слева и нажмите Запустить рабочий процесс.
Что дальше
Полный пример конфигурации CI см. в примере Jetcaster, который также включает задания для сборки настольных приложений JVM для macOS, Windows и Linux.
Рекомендации по публикации приложений в магазинах приложений с помощью GitHub Actions приведены в серии публикаций Марко Гомьеро на эту тему.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/github-actions-for-kmp.html