Це загальний сценарій, коли база даних продукту, що знаходиться в сховищі в деякій системі VCS, розвивається до того моменту, коли ця кодова база може бути зрозуміла, що містить декілька продуктів. Розбиття бази даних коду на кілька сховищ VCS, кожне присвячене одному продукту, може скористатися кількома перевагами (див. Переваги наявності продукту на сховище VCS над моделлю репозиторію, що знаходиться внизу). З технічної сторони розділення кодової бази є досить простим кроком, оскільки більшість VCS підтримують цю операцію. Однак розкол може виникнути інженерні проблеми, пов'язані з автоматизованим тестуванням, постійною доставкою, інтеграцією послуг або моніторингом (див. Проблеми, порушені розколом.) Організаціям, які планують здійснити такий розкол, тому необхідно знати, як провести цей перехід максимально плавно, тобто не перериваючи їхню доставку та моніторинг трубопроводу. Перший крок цього, мабуть, краще зрозуміти поняття проекту та як розмежувати розкол у монолітній кодовій базі.
У відповідях на це питання я хотів би побачити:
Спроба дати робоче визначення того, що таке продукт, що дає практичні критерії для фактичного розмежування продуктів у існуючій кодовій базі.
Відповідно до цього робочого визначення, розробіть план, який фактично виконує розкол. Можна зробити спрощене припущення, що база даних обробляється повністю автоматизованим sdlc, реалізуючи безперервну інтеграцію та безперервну доставку . Тобто, кожна гілка перевіряється автоматизованим тестовим набором, реалізованим у поточній кодовій базі даних, і кожне злиття з якоюсь "магічною" гілкою генерує артефакти продуктів , які тестуються та розгортаються. ( Артефактами товару є, наприклад, вихідні тарболи, документація, двійкові програмні пакети, зображення Docker , AMI, unikernel.)
Такий план є задовольняючим, якщо він пояснює, як обійти
Питання, порушені розколом
Наскільки автоматизовані процедури тестування стосуються раніше існуючого монолітного сховища та розділених сховищ?
Як автоматизовані процедури розгортання стосуються раніше існуючого монолітного сховища та розділених сховищ?
Де зберігається код для самих процедур автоматизованого розгортання?
Де зберігаються інфраструктура , моніторинг та стратегії високої доступності ?
Як переконатися, що розробнику потрібна лише одна база коду за один раз (але можливе використання артефактів з інших баз кодів).
Як можна такий інструмент, як git-bisect
Маргінальна примітка: Переваги наявності продукту на сховищі VCS над моделлю репозиторію
Наявність декількох невеликих сховищ, що містять базу даних коду для конкретного продукту, має такі переваги перед підходом до "схожих сховищ":
За допомогою репозиторію роздуття важко повернути реліз, коли продукт нестабільний, оскільки історія змішується з іншою історією продукту.
Маючи складне сховище, важко переглядати історію проекту чи тягне, з невеликими сховищами ми швидше читаємо цю інформацію. (Це може бути специфічно для VCS, як git, де на відміну від svn, ми не можемо перевірити підрядки!)
Із розгалуженим сховищем нам потрібно робити набагато більше танцю на гілці, коли ми розвиваємося. Якщо у нас є N сховищ, ми можемо працювати паралельно на N гілках, якщо у нас є лише 1 сховище, ми можемо працювати тільки над однією гілкою, або маємо безліч робочих копій, які також є клопотом для обробки.
Маючи кілька невеликих сховищ, журнали дають теплову карту проекту. Вони навіть можуть бути використані як проксі розповсюдження знань у команді розробників: якщо я не брав на себе репо X через 3 місяці, було б непогано призначити мене в команду, яка працює над repo X, щоб я був в курсі подій в цій складовій.
З невеликими сховищами легше отримати чіткий огляд компонента. Якщо все складається в одному великому сховищі, немає жодного відчутного артефакту, що окреслює кожний компонент, і база коду може легко плисти до великої кулі грязі .
Невеликі сховища змушують нас працювати над інтерфейсами між компонентами. Але оскільки ми хочемо мати гарну капсулу, це робота, яку ми все-таки повинні зробити, тому я вважаю це перевагою для невеликих сховищ.
Маючи кілька невеликих сховищ, легше мати декількох власників продуктів.
З декількома невеликими сховищами легше мати прості стандарти коду, що стосуються повного сховища, які можна автоматично перевірити.