Инструмент | Особенности |
---|---|
GitHub Actions | Интеграция с GitHub, бесплатен для OSS |
Bitrise | Специализирован для мобильных приложений |
Jenkins | Гибкость, требует самохостинга |
GitLab CI/CD | Встроен в GitLab, хорош для enterprise |
CircleCI | Простота настройки, кэширование |
name: Android CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: '11'
- name: Build with Gradle
run: ./gradlew assembleDebug
- name: Run tests
run: ./gradlew test
- name: Cache Gradle
uses: actions/cache@v2
with:
path: |
```/.gradle/caches
```/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
./gradlew assembleRelease
./gradlew connectedCheck
./gradlew ktlintCheck
./gradlew lint
- name: Sign APK
run: |
echo "${{ secrets.RELEASE_KEYSTORE }}" > keystore.jks
./gradlew assembleRelease \
-Pandroid.injected.signing.store.file=keystore.jks \
-Pandroid.injected.signing.store.password=${{ secrets.KEYSTORE_PASSWORD }} \
-Pandroid.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} \
-Pandroid.injected.signing.key.password=${{ secrets.KEY_PASSWORD }}
- name: Run Instrumentation Tests
run: |
gcloud firebase test android run \
--app app/build/outputs/apk/debug/app-debug.apk \
--test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk \
--device model=Pixel2,version=30
- name: Run emulator
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 30
script: ./gradlew connectedCheck
организация CI/CD для Android требует настройки автоматизированной сборки, тестирования и публикации с использованием специализированных инструментов. Оптимальный пайплайн включает стадии проверки кода, запуска тестов и контролируемого деплоя с возможностью быстрого отката.