-
Notifications
You must be signed in to change notification settings - Fork 0
CI: Jenkins
В Android-проектах используется CI/CD-решение Jenkins
Данное решение позволяет организовать сборку, тестирование и доставку полученного артефакта до целевых групп/ресурсов.
На текущем этапе, как правило, Jenkins в Android-проектах настроен на работу по следующим этапам:
- Получение из Git-репозитория актуальной ветки проекта
- Сборка артефакта проекта
- Тестирование полученного артефакта с помощью написанных в проекте тестов. На данный момент это только тесты JUnit, которые раскрыты в статье о тестировании. Инструментальное тестирование на данный момент не реализовано. На этом же этапе код проверяется встроенным статическим анализатором Android - Lint, формируя отчёт об обнаруженных проблемах в коде
- Архивация полученных результатов тестирования (этап №3)
- Публикация собранного артефакта и оповещение целевых групп (деплой артефакта в систему Fabric Beta, оповещение в чате проекта об окончании сборки)
Настройка процедуры, которую я привел выше, производится в рамках сценария Jenkins'а под названием Pipeline. Для данного сценария необходимо вручную, в специальном скрипте,
Для создания новой сборки, необходимо:
- В главном терминале Jenkins'а выбрать "Создать Item"
- В открывшемся окне ввести имя новой сборки, которое будет отображаться в списке сборок. Тут следует учесть, что для разных платформ удобно указывать название платформы в суффиксе через нижний слэш (прим.
someproject_android) - Выбрать тип сборки
Pipelineи нажать внизу на "Ок" - Далее мы перейдем на экран настройки сборки. Будем идти по порядку:
- Ставим галку напротив "Удалять устаревшие сборки", указав стратегию
Log Rotation, и указав в обоих полях значение "1" ("Сколько дней хранить результаты сборки" и "Сколько последних сборок хранить") - Ставим галку напротив "Это - параметризованная сборка". Создаем параметры сборки по логике: Choiсe parameter (используется для ограниченного выбора из заранее определенного числа элементов, можно использовать для
Flavor'ов,BuildType'ов и прочих ограниченных выбором вещей), Multi-line String Parameter (идеально подходит для описания изменений в версии билда, т.е.ReleaseNotes), String (подходит для указания ветки Git'а, с которой стоит получить изменения на этапе сборки, т.е.Branch. Тут для этого кейса стоит установить галку "Trim the string" для обрезания возможных пробелов в строке) - Ставим галку напротив
Trigger builds remotelyи устанавливаем значениеunitbeanRemotelyBuild. Данное значение позволяет запускать сборки проектов извне, с помощью специальной URL-команды (временно сломана со стороны Jenkins'а, в поисках решений) - Переходим к финальному полю, основному телу Pipeline-скрипта. Образец, на который можно ориентироваться, можно взять из смежных
_android-проектов. Сам скрипт базируется на языке Groovy.
- Убедиться, что в Android-проекте настроена работа в среде Jenkins:
android {
..
buildTypes {
release {
..
ext.betaDistributionGroupAliases="android-ub-testers, all-unitbean-android-"
ext.betaDistributionReleaseNotesFilePath="${rootProject.projectDir}/releaseNotes.txt"
}
debug {
..
ext.betaDistributionGroupAliases="android-ub-testers, all-unitbean-android-"
ext.betaDistributionReleaseNotesFilePath="${rootProject.projectDir}/releaseNotes.txt"
}
}
}Прим.: поле ext.betaDistributionGroupAliases указывает, на какие группы тестировщиков в Fabric посылать тестовые сборки. Его следует брать из Fabric/Manage Groups/<group>/Alias; поле ext.betaDistributionReleaseNotesFilePath указывает, из какого файла будут считаны примечания к релизу
- После того, как проект создан и настроен, можно запускать его сборку. Но тут следует учесть, что при сборке Android-приложений, как правило, требуется JKS-файл с подписью. И по стандарту его не следует хранить в индексе Git'а, что может создать ситуацию, когда проект падает при сборке на этапе "Build" с обозначением соответствующей ошибки с ключами. В данном случае следует вручную с помощью bash положить
.jks-файл в директорию проекта. Данная процедура описана в блоке чуть ниже
Для получения доступа нужно зайти в корпоративный ЯДиск/Projects/Jenkins/Jenkins sudo.rtf Так лежат доступы для получения достижения папки root.
Процедура:
- Положить с помощью FileZilla файл в общедоступную папку
- Зайти под root в Jenkins с помощью ssl
- С помощью root доступа переместить файл из общедоступной папки в папку проекта
- Самостоятельно найти реализацию для Jenkins'а, зачастую выступающую в виде плагина для системы. Изучить страницу плагина на предмет необходимых данных для работы оного и выдаваемых артефактов работы на выходе. Если все устраивает, то переходить к п.2, если нет - то предпринять попытку самостоятельно доработать плагин для синхронизации его работы с текущей реализацией системы (например, создавать временный файл для передачи данных в другие места)
- Обратиться к администрирующему Jenkins человеку. На данный момент это Владислав Кирилличев (@vlad.kirilichev в Slack'е) с просьбой подключить необходимый плагин к системе и произвести прочие манипуляции, в случае, если есть необходимость.
- Когда плагин подключен и выполнены манипуляции, то для использования плагина можно сразу преступить к редактированию Pipeline-скрипта, либо обратиться ко встроенной утилите
Pipeline Syntax, с помощью которой все встроенные плагины и системы умеют генерировать Pipeline-скрипты для встраивания их в основной скрипт проекта. После генерации необходимого скрипта, то нужно интегрировать его в основной скрипт, таким образом, начав использовать новый подключённый плагин в Jenkins'е - Запустить сборку проекта с обновлённым Pipeline-скриптом, проверяя, таким образом, целостность и работоспособность нового решения
Необходимые ссылки:
Внешние материалы:
Образовательное чтиво о системе Android и её внутреннем устройстве. Может сильно напрячь мозг неподготовленному читателю