Spec-Zone.ru › Kotlin 2

Настройка 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, чтобы проверить изменения перед сборкой приложения для всех платформ:

  1. Получите копию репозитория, для которого нужно запустить тесты.

  2. Используйте ранее подготовленное составное действие gradle-setup для настройки Java и Gradle.

  3. Запустите тесты с помощью команды ./gradlew.

  4. Загрузите отчёты о тестировании как артефакт из каталога **/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:

  1. Получите копию репозитория, из которого нужно собрать пакет.

  2. Используйте ранее подготовленное составное действие gradle-setup для настройки Java и Gradle.

  3. Соберите APK с помощью команды ./gradlew.

  4. Загрузите собранный пакет из каталога 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:

  1. Получите копию репозитория, из которого нужно собрать приложение.

  2. Используйте ранее подготовленное составное действие gradle-setup для настройки Java и Gradle.

  3. Соберите приложение для iOS с помощью xcodebuild — в примере показаны параметры, используемые для образца Jetcaster KMP.

  4. Загрузите папку с собранным приложением (всё содержимое 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 приведены в серии публикаций Марко Гомьеро на эту тему.

18 марта 2026
Настройка проекта с помощью Kotlin ToolchainНастройка TeamCity для приложения на Kotlin Multiplatform

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API