Автоматизация билдов(Crashlytics + Slack + FastLane)
Раньше (Черно-белая картинка, угрюмый разработчик сидит за столом)
1. Повышает версию кода в build.gradle
2. Собирает билд
3. Грузит билд в crashlytics
4. Пишет в слак что залил новый билд
Теперь (Яркая картинка, веселый парень):
консоль: fastlane new_build
А теперь серьезно. В нашем деле нужно автоматизировать все, и в этой статье я расскажу как автоматизировать выпуск билдов с помощью fastlane.
Fastlane — это продукт от fabric который помогает автоматизировать создание билдов под android,ios и mac. Я работаю на mac и буду рассказывать именно про установку на нем.
Несколько подготовительных шагов:
- Вам потребуется установить xcode (Вместе с ним устанавливаются нужные библиотеки)
- Установить сам fastlane. Нажимаем тут и выбираем что хотим подключить и скачиваем архив
- Внутри найдете файл installer/install. Устанавливаем его (Скорее всего вам потребуется включить в настройках безопасности возможность устанавливать не со стора)
- И последний скучный шаг, в консоле пишем:
cd /path_your_project
fastlane init
это создаст папку fastlane в вашем проекте.
И когда все подготовительные шаги завершены, начинается самое интересное. В папке fastlane есть файл Fastfile (Ребята не заморачивались с названиями), это скрипт на ruby.
Сразу нужно понять два основных понятия lane и action.
Lane — это набор action которые будут исполнены. Их может быть несколько они могу отличаться друг от друга по, например, запускаемому gradle task. И мы будем запускать непосредственно Lane
Action — это действия которые может совершать fastlane. Вот набор доступных Action
И теперь немного кода:
# Название lane - test (вызвать его из консоли : fastlane test)
lane :test do
# Выполняется билд приложения
gradle(task: "assembleDevDebug")
# Дальше загрузка в crashlytics
crashlytics(
api_token: "api_token",
build_secret: "build_secret",
emails: "name@gmail.com, ivan@gmail.com",
# Это путь к файлу откуда подтягиваем note для крашлитики
notes_path:"/Users/Android/notes.txt"
)
slack(
# У слета есть web hook, который указывает в каком канале создавать меседж
slack_url: "https://hooks.slack.com/services/dddd/ddddd/ddddd",
icon_url: "https://icon.png",
username: "Android",
default_payloads: [:test_result,:last_git_commit_message],
payload: {"Build Date" => Time.new.to_s,},
message: message
)
end
Все возможности кастомизации action можно посмотреть по ссылке
То что мы сделали уже довольно неплохо. Мы можем через одну строчку собрать проект загрузить его в crashlytics и написать об этом сообщение в slack. Кстати вот так оно выглядит:
На реальных проектах возникает потребность собирать разные сборки для разных целей, например: на живой сервер для заказчиков и на тестовый для тестировщиков.
Это можно сделать через product flavor в gradle. Если эта статья будет интересна читателям в следующей я расскажу как сделать возможность созвать разные сборки под разные нужды, авто инкрементировать версию кода в нужных сборках и писать об этом в slack.
Автор: palamarenco