Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Новый уровень модульной разработки - Mon Repo

Новый уровень модульной разработки - Mon Repo

Сначала их было всего один, потом появились множество модулей. Чтобы оптимизировать работу с модулями, мы попробовали разные варианты. В итоге мы дошли до уровня Mono Repo - один repository для всего.
В данном докладе расскажу о том, какие варианты реализации модульной разработки существует и в чем их недостаток.

Zhanibek Marshal

November 24, 2018
Tweet

More Decks by Zhanibek Marshal

Other Decks in Programming

Transcript

  1. Проекты Kolesa Team - Android Колёса Май, 2013 Крыша Сентябрь,

    2014 Маркет Август, 2016 Avtoelon.uz Октябрь, 2018 2
  2. Первый уровень модульной разработки Решили создать отдельный Git Repository для

    общей бизнес логики kz.kolesateam.sdk Первое время будет проще работать с Git submodule 6
  3. Второй уровень модульной разработки allprojects { repositories { maven {

    url "https://artifactory.kolesa-team.org/libs" } } } dependencies { implementation "kz.kolesateam:utils:1.0.0" implementation "kz.kolesateam:authentication:1.0.0" } 9
  4. Локальный repository для модулей Преимущество: - Кэширование внешних библиотек в

    локальных сетях - Удобное хранилище apk файлов, создаваемое в CI Если сложно поднять в in-house, можно воспользоваться их SaaS решением 10
  5. Удобство публикации в artifactory 1. Четкая граница ответственности 2. Меньше

    шансов сломать сборки других проектов 3. Версионирование 4. Нет необходимости пересобирать исходный код 11
  6. Минусы публикации в artifactory 1. Сложнее править архитектуру проектов 2.

    Много повторяющегося кода 3. Версионирование 12
  7. Mono Repo Вместо того чтобы хранить код в разных repository

    Поместим все в один репозиторий 18
  8. Как настроить settings.gradle include ‘:kolesa’, ‘:authentication’ project(‘:kolesa).projectDir = new File(‘apps/kolesa’)

    project(‘:authentication).projectDir = new File(libs/authentication’) apps/kolesa/build.gradle dependencies { implementation project(‘:authentication’) } 19
  9. Теперь у нас Mono Repo apps/ Kolesa Krisha Market Avtoelon

    libs/ Analytics-core Authentication UI Network ... 25
  10. Статус миграции Количество файлов: 7943 Количество коммитов: 33045 Размер repository:

    192.4MB Количество модулей: 19 Количество модулей в будущем 30
  11. • Всегда актуальная версия тоже создает иногда неудобство • Не

    получится закрыть доступ к определенным модулям Недостатки Mono Repo 37
  12. • Всегда актуальная версия тоже создает иногда неудобство • Не

    получится закрыть доступ к определенным модулям • git clone скачивает всю историю repository Недостатки Mono Repo 38
  13. • Всегда актуальная версия тоже создает иногда неудобство • Не

    получится закрыть доступ к определенным модулям • git clone скачивает всю историю repository ◦ В целом git не предназначен для большого repository Недостатки Mono Repo 39
  14. • Всегда актуальная версия тоже создает иногда неудобство • Не

    получится закрыть доступ к определенным модулям • git clone скачивает всю историю repository ◦ В целом git не предназначен для большого repository • clean build занимает много времени Недостатки Mono Repo 40
  15. Итог миграции • Ускорили процесс разработки • Разбиваем монолит в

    проектах на мелкие модули • Проще изменять зависимость модулей • Весь исходный код в одном каталоге 41
  16. Ссылки • https://git-scm.com/book/en/v2/Git-Tools-Submodules • https://habr.com/company/kolesa/blog/353942/ • https://eng.uber.com/android-monorepo/ • https://en.wikipedia.org/wiki/Monorepo •

    http://danluu.com/monorepo/ • https://gregoryszorc.com/blog/2014/09/09/on-monolithic-repositories/ • https://github.com/unravelin/tomono 42