Локальная автоматизация билдов(Crashlytics + Slack + FastLane)

    Автоматизация билдов(Crashlytics + Slack + FastLane).

    Раньше (Черно-белая картинка, угрюмый разработчик сидит за столом)

    1. Повышает версию кода в build.gradle
    2. Собирает билд
    3. Грузит билд в crashlytics
    4. Пишет в слак что залил новый билд

    Теперь (Яркая картинка, веселый парень):

    консоль: fastlane new_build

    А теперь серьезно. В нашем деле нужно автоматизировать все, и в этой статье я расскажу как автоматизировать выпуск билдов с помощью fastlane.

    Fastlane — это продукт от fabric который помогает автоматизировать создание билдов под android,ios и mac. Я работаю на mac и буду рассказывать именно про установку на нем.

    Несколько подготовительных шагов:

    1. Вам потребуется установить xcode (Вместе с ним устанавливаются нужные библиотеки)
    2. Установить сам fastlane. Нажимаем тут и выбираем что хотим подключить и скачиваем архив
    3. Внутри найдете файл installer/install. Устанавливаем его (Скорее всего вам потребуется включить в настройках безопасности возможность устанавливать не со стора)
    4. И последний скучный шаг, в консоле пишем:
      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.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 3
    • 0

      С FastLane не очень понятно это что-то вроде набора скриптов которые ранняться локально?

      • 0

        Можно локально, можно на CI

      • 0

        Наша команда опубликовала свой набор lanes: https://github.com/rosberry/RSBFastlane. Из интересного — умеет добавлять UUID девайсов и таскать тикеты в JIRA в нужные колонки.
        А еще я написал небольшую утилиту на Swift: https://github.com/artemnovichkov/fastfood, чтобы удобно добавлять fastlane в новый проект.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.