Рубрики
Uncategorized

Почему вы должны рассмотреть Mono Repo и единую сборку? Серебряная пуля

Тематическое исследование на монофоре и единой сборке. Теги с советами, обсуждением, дежопами, развитием.

Если вы пришли в этот блог, просто читая название и иметь странные мысли о чем-то

Конкретно, позвольте мне уточнить, что сначала нет! Я не собираюсь разделить 100 способов убить волк, даже не совет, чтобы выбить один. На самом деле, мой титул вдохновлен бумагой No Silver Bullet Frederick P. Brooks, Jr. Что я читаю во время выпуска.

Нет единого развития, в технике технологии, либо в технике управления, которые сами по себе обещают даже один порядок улучшения величины в течение десятилетия в производительности, в надежности, в простоте. — Нет серебряной пули Фредерика П. Брукс, младший.

В этом блоге я объясню, как мы начали с существующего рабочего процесса с первым проектом, какие проблемы у нас, как мы можем решить их и то, что мы делаем сейчас для второго проекта.

Дрейф с током

Прошло восемь месяцев, мы работаем над нашим первым проектом в Polarbears, наша цель состояла в том, чтобы доставить первый проект как веб-приложение, приложение для Android и приложение iOS. Чтобы поддержать эти платформы, мы решили разработать API, иметь общую реализацию для обоих клиентов. Итак, мы закончили создать три репозитории для мобильных устройств, WEB и SERVER. Чтобы сохранить эти репозитории, мы разделили нашу команду в более мелкие команды в соответствии с имеющимися навыками и знаниями для каждой платформы. Пришло время решить наш рабочий процесс развития, как мы будем обрабатывать филиалы, сборки, развертывание и среды.

Мы были вновь сформированным отрядом, и большинство членов не работали друг с другом ранее, наша первая задача состояла в том, чтобы взять команду для выполнения фазы, как описано Tuckman на его этапах развития группы. Вторая задача состояла в том, чтобы доставить проект вовремя, исследуясь на лучшие подходы или изучить, как отрасль решает эти вопросы, мы можем пропустить крайний срок. Таким образом, эти два в виду мы решили принять существующую модель рабочего процесса для нашего проекта, которая используется большинством проектов в моей организации.

Позвольте мне объяснить эту модель, есть четыре среды разработки, качество, постановка и производство, я буду ссылаться на них как D, Q, S и P. Чтобы поддержать эти среды, которые у вас есть четыре длинные (всегда открытые) ветви дефолты, Качество, стабильное и производство. Каждая ветвь настраивается с бамбуковым планом сборки, который затем вызывает план развертывания бамбука для каждой среды. D предназначен для ежедневного развития, Q предназначен для тестирования на QA, S для тестирования Po, а затем P предназначен для клиентов.

Объединить ад

Давайте погрузимся в известное использование с этим рабочим процессом. Если вы хотите продвинуть свою среду D для q среды, вам просто нужно объединить ветвь D, в Q, выполнив этот бамбук, будет вызвать сборку на коммитке слияния, если это создаст результаты успешно, он будет развернут в Q. То же самое поток для продвижения Q до S и S до P. Итак, по этой модели Если вам нужно отпустить новую функцию X в P-среду. Вы должны развивать его на D, а затем продвигать его через Q и S до P. Путешествие от d до p не так просто, как я описал, есть ряд предупреждений. Было бы определенные проблемы окружающей среды, и вы отметите, что они отсутствуют в какой-либо другой среде. (например, клиент сообщит о проблеме, которая работает нормально на D, Q и S). Я уверен, что большинство читателей могут сказать ту же историю, случилось с ними. Итак, вопрос в том, почему это произошло? Позвольте мне попытаться ответить на этот вопрос как мои лучшие знания, помните, что у нас есть филиалы, настроенные с помощью бамбуковых сборки, и всякий раз, когда вы совершаете код или объединить ветку, которая запускает Bamboo Build. Поэтому, если вы объединяете D до q, q до s, или s до p, бамбук построит новый двоичный двоичный для каждой среды. Что означает каждый раз, когда вы объединяетесь, похоже, что у вас есть тот же код на D и Q, но на самом деле, оба сборки различны и приводят к различным вариантам двоичных и развертываемых активах. Это причина этих волшебных слов, каждый разработчик сказал один раз в своей жизни.

Но он работает на MyMachine. [где mymachine = [d, q, s]//в нашем случае]

Допустим, мы нашли проблему как-то по другой среде и надо это исправить. Так что вопрос в том, как мы должны это исправить? Вы можете подумать, что это исправить это на D, а затем продвигать его на Q, S и P. Да, это вариант, но не займет слишком много времени, чтобы исправить ошибку? Да, это займет слишком много времени. Почему бы нам просто исправить это на P и сносить обратно на S, Q и D? Да, мы обычно используем эту опцию для горячих проблем/ошибок на P, а иногда и после этого наши филиалы похожи на изображение, которое также известно как Merge-Hell.

Суть материи

Если мы проанализируем выбранный модель рабочего процесса и количество номеров, мы узнаем, что в этом не так. Итак, мы получили три репозитории Mobile, Web и Server, каждый с 4 филиалами, 4 сборки, 4 развертывания и 4 среды. Всего нам нужно позаботиться о 48 вещах только для одного проекта. И мы сделали восемь месяцев, это не просто обслуживание, но время, усилия и стоимость, связанные с этим.

Помимо этой стоимости, представьте, что если вы должны выпустить новую функцию, которая проходит через все платформы, с этим рабочим процессом, безусловно, оно приведет к более высокой разработке до производства времени. С этой моделью было бы трудно разработчику работать на нескольких платформах, которые не должно происходить. Мы не просто делаем ежедневные задачи болезненными, но делая всю модель менее прозрачной. Чтобы узнать статус определенной функции на другой платформе, вам придется сделать дополнительную работу каждый раз. Поскольку проходит время в том, что вы будете обучены на этой дополнительной работе, и это не было бы проблемой, но более высокие вероятности, вы будете менее любопытны и раздражены, делая то же самое снова и снова.

Так, по дизайну, мы ввели «вязкость окружающей среды», как указано Роберт С. Мартин в его книге,

Вязкость поступает в двух формах: вязкость программного обеспечения и вязкость окружающей среды. Столкнувшись с изменением, разработчики обычно находят более одного способа сделать это изменение. Некоторые из способов сохранить дизайн; Другие не делают (то есть, они хаки). Когда методы сохранения дизайна сложнее использовать, чем хаки, вязкость конструкции высока. Легко сделать неправильную вещь, но трудно сделать правильно. Мы хотим разработать наше программное обеспечение так, что изменения, которые сохраняют дизайн, легко сделать. Вязкость окружающей среды приходит, когда среда развития медленная и неэффективна. Например, если времена компиляции очень долго, разработчики будут соблазны внести изменения, которые не заставляют большой перекомпинок, даже если эти изменения не сохраняют дизайн. Если система управления исходным кодом требует часов, чтобы проверить всего несколько файлов, разработчики будут соблазнены вносить изменения, которые требуют как можно меньше, независимо от того, сохраняется ли дизайн. В обоих случаях вязкий проект — это тот, в котором конструкция программного обеспечения трудно сохранить. Мы хотим создавать системы и проектные среды, которые облегчают сохранение и улучшение дизайна. — Agile принципы, шаблоны и практики в C # Роберта С. Мартин и Мики Мартин

Другая проблема, которую нужно рассмотреть, поддерживает обновленную доску, которая сталкивается со многими разработчиками, включая меня. Итак, почему кто-то не решает эту проблему раз для всех? Почему мы не можем интегрировать битбукет с Джирой и позвольте им поговорить друг с другом в определенные случаи, такие как создание ветки, совершая ваш код, создавая запрос на тягу, слияние запроса на тягу, а в результате они сохраняют обновленную плату? Ответ на все эти вопросы — да, мы можем, и мы сделали. Я расскажу об этом подробно в будущем блоге.

Когда была сформирована полярные медведя отряд, наша первая встреча состояла в том, чтобы определить нашу систему ценностей », продолжайте развиваться (ничего не остается постоянным, изменение хорошее до тех пор, пока не будет положительным)« было наше первое значение. Все эти месяцы у нас была эволюция в нашем ячее, но нам не было в состоянии изменить репозитории, филиалы, сборки, среды и рабочий процесс для первого проекта, потому что мы были очень близко к выпуску V1.0, мы знали, что если мы что-нибудь изменили Мы можем пропустить крайний срок.

Новое направление

Три недели назад мы узнали, что второй проект готов к бенду, и мы были очень рады столкнуться с новой задачей, подождите ждать ждать !!! Новая проблема? Разработка приложения с той же технологией, тот же рабочий процесс? Та же модель ветвления? та же база данных? Та же планы сборки? И одинаковые развертывания? Это не будет проблемой, Это просто «такой же кофе в новой упаковке». Так что же будет проблемой тогда? Задача будет зафиксировать все вышеуказанные проблемы в новом проекте или, по крайней мере, попробуйте ее. Вот наши проблемы

Моно-репо

Большинство лучших компаний, таких как Google, Microsoft, и Facebook, используют моно-хранилище для их проекта. MONO-REPO означает один репозиторий для всего, делющего папки и подпапки для нескольких проектов и модулей, они ежедневно обрабатывают миллионы коммитов по поводу пользователей и ботами, с изменениями файлов. Теперь вопрос в том, как они это делают? Может ли инструменты (например, Git и Mercurial мы используем ежедневно), обрабатываем это количество коммитов и данных? Очевидно, нет, эти три компании расширили существующие инструменты или создавали собственные системы для обработки этой суммы данных. Но это не значит, что мы должны также создавать наш, наша кодовая база по сравнению с этими гигантскими компаниями — ничто, и эти простые инструменты могут обрабатывать наши коммиты и изменения файлов. Поэтому, если мы просто используем эти инструменты с Mono-Reppo, у нас будет поддержка по умолчанию. Вы можете прочитать больше на этих здесь и здесь Отказ Итак, это означает, что у нас может быть один репозиторий, имеющий три папки для трех платформ, и мы получим поддержку из коробки ежедневными инструментами использования. Это здорово, не так ли?

Одна ветка

Теперь вопрос в том, что мы не объединяем все 48 вещей для одного репозитория, который ранее был разделен на три разных репозитория, у нас будет двенадцать ветвей в одном репозитории для поддержания, и было бы хуже, чем предыдущая модель. Да, было бы хуже, если мы не обновим ваш рабочий процесс с MonoRepo. Популярный подход, который широко используется с Mono-Reppo, является развитие на основе сундука, который

Модель ветвления исходного контроля, где разработчики сотрудничают на коде в одном ветви, называемом «багажником», противостоять любому давлению, чтобы создать другие долгоживущие ветви разработки, используя документированные методы. Поэтому они, следовательно, избегают слияния ада, не нарушайте сборку, а живут счастливо. — развитие на основе багажника

Поэтому, если мы усыноваем Mono-Reppo с развитием багажника, мы можем уменьшить количество ветвей до 1.

Один сборник

Чтобы понять сборки, развертывания и среды, нам нужно посмотреть, какие обязанности и функции они делают или служат. Создает код клонирования, запустите через него преобразования, установите зависимости, код сборки, создайте и публиковать артефакты. Развертывание опубликованы артефакты из сборки и развертывают их на IP. Окружающие среды работают на IP, предоставляют ОС и хостинг сервера для двоичных файлов.

Каждый раз, когда мы совершаем новый код или объединить ветку, которую мы триггерируем сборки, а успех строить развертывание триггеров. Ниже приведены действия, выполненные сборкой и развертыванием. Шаги могут отличаться в зависимости от проекта, но вы получите представление о том, о чем я говорю.

( Shared : То же самое для D, Q, S, и P | отдельно : Уникальный для D, Q, S, и P)

Строить
  1. Код клонирования (общий)
  2. Запускать преобразования (отдельно)
  3. Выберите конфигурации (отдельно)
  4. Установка зависимостей (Shared)
  5. Чистая сборка (общий)
  6. Построить (общий)
  7. Создание артефактов (общих)
  8. Опубликовать артефакты (общие)

Если мы посмотрим близко только действия, которые являются уникальными для каждой среды, являются причиной, чтобы иметь несколько сборки. Если мы можем удалить или исправить эти уникальные действия, мы можем достичь одной сборки. Преобразования являются меньшими изменениями кода, которые нам нужны для данной среды, такие как изменение значения переменного на основе среды. Мы можем легко избавиться от них, если мы оптимизируем наш код, чтобы использовать настройки конфигурации для этих меньших изменений кода. Теперь, что осталось, это конфигурации, которые будут отличаться для каждой среды. Если мы просто удалите этот шаг из сборки и назначьте его в развертывание для первого выбора конфигурации перед развертыванием артефактов, у нас больше не будет никаких необходимости в нескольких сборках, и наши сборки могут быть уменьшены до 1.

4 Развертывания и среды после изменения действий по сборке У нас будут следующие действия для сборки и развертывания.

Строить
  1. Код клонирования (общий)
  2. Установка зависимостей (Shared)
  3. Чистая сборка (общий)
  4. Построить (общий)
  5. Создание артефактов (общих)
  6. Опубликовать артефакты (общие)
Развертывание
  1. Получить опубликованные артефакты (общие)
  2. Выберите конфигурации (отдельно)
  3. Развернуть артефакты на IP (отдельный)

Как правило, развертывание плотно связаны с средами, и если нам нужно уменьшить количество развертываний, которые нам придется уменьшить количество сред или иметь одно развертывание и изменить способ работы нашей конфигурации. Чтобы изменить конфигурации, мы можем использовать удаленные конфигурации, которые поддерживаются AWS, FireBase и другими популярными платформами. Мы должны будут реализовать способ переключаться между различными средами, и если ваш отряд ежедневно использует каждую среду, это было бы проблемой для этого. Давайте сохраним развертывание, как и для реализации в Интернете и сервера, и сосредоточиться на мобильном приложении. Мобильное приложение потребляет API, предоставляемое сервером или иногда работает самостоятельно. Так что, если наше приложение потребляет API и предоставление просмотров и данных на основе ответов API. Мы просто заменяем базовый URL API в наши развертывания и создавая отдельное развертывание для D, Q, S, и P. for Mobile, мы можем настроить развертывание для создания для P по умолчанию P по умолчанию и встроить скрытый механизм для включения D, Q и S. Для этого мы можем использовать любой пользовательский механизм, как нажатие на логотип приложения 10 раз и т. Д. После того, как мы включили настройки или меню разработчика, мы можем предоставить раскрывающиеся или переключатели для выбора сред. Чтобы принять больше контроля, мы можем предоставить им функции-флаги и удаленные конфигурации. Уже есть встроенные системы ( SpaceFlags flationsflags , Запуск — темно-темно и Пулерета ), которые служат этой цели. Подробнее о Флагах Функции Вы можете прочитать здесь Отказ

Таким образом, мы сократили наше мобильное развертывание и окружающую среду в одну, а остальные одинаковы. Если есть обновление на сервере или веб-развертывании и средах, я буду обновлять этот раздел.

Время для действия

Таким образом, для второго проекта мы экспериментируем с этим новым рабочим процессом, с Mono-Reppo, одна строя, чтобы управлять всеми средами, сокращенными развертываниями и средами, она поможет нам снизить развитие до производства времени. Мы будем использовать пулевую поездку для функций и удаленных конфигураций, его бесплатным для 20 000 запросов в месяц и будет служить целям, как очарование.

Я постараюсь написать другую часть этого с доказательством концептуальных и технических деталей, поэтому вы можете увидеть все в действии. Таким образом, мы сократили репозитории от 3 до 1, строят от 12 до 3, развертываемые от 12 до 9 и окружающую среду от 12 до 9. Это не большой прыжок Но это ваша на вынос из этого блога.

Те, кто не получил шутку волков, пожалуйста, прочитайте Это Во-первых, и если вы все еще не поняли. Здесь это трехшатная процедура для убийства.

Пожалуйста, кричите свои мысли в комментариях. Предложения, критика улучшения высоко ценятся.

Спасибо ba.

Оригинал: «https://dev.to/bilalarxd/why-you-should-consider-mono-repo-and-single-build-the-silver-bullet-case-study-31j0»