Ми невелика фірма з кількома командами, які керують власними сховищами git. Це веб-платформа, і артефакти кожної команди розгортаються в кінці дня для проведення нічних тестів. Ми намагаємось формалізувати процес навколо версій та упаковки.
Кожна команда має головну галузь, де вони щодня розробляють. Члени кожної команди із забезпечення якості хочуть, щоб артефакти від змін їх команди були розміщені в тестовому стані, де всі компоненти поєднуються шеф-кухарем. Артефакти - це тарботи, але я хотів би перетворити їх у RPM, щоб ми могли правильно думати і міркувати про версії.
Процес випуску передбачає відрізання гілки випуску з гілки розвитку (майстер у більшості випадків) кожного сховища git. Потім це надається гарантії якості, яка виконує тести та виходить на набір артефактів.
Наприклад, це типовий сховище git із пов'язаними з ним гілками випуску:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Я застряг, намагаючись розробити схему виконання версій пакетів, що надходять із галузей розвитку. Ми не хочемо надмірно тегувати головну гілку кожного репо і обмежуємо теги випускати лише гілки. Але ми повинні мати можливість запитувати розгорнуті пакети в тестових машинах, використовуючи стандартну семантику yum / rpm. Як виглядатимуть версії розробок, коли в головній гілці немає тегів? Я розумію, що git describe
може дати мені корисне представлення версії збірки, але це добре працює, коли різні точки випуску на гілці позначені тегами.
EDIT1: У відповідь на відповідь @ Urban48
Я подумав, що варто трохи більше пояснити наш процес випуску. Для цілей цієї дискусії припустимо, що master
у всіх сховищах є відділення . master
Галузь вважається гілкою розробки та розгортанням на автоматизований CI-CD включаючи середовище QA. Ось тут виконується підмножина нічних тестів, щоб забезпечити стабільність господаря. Ми розглядаємо цю роботу із робочими місцями, перш ніж вирізати гілку випуску. Наші відділення випуску нетривалі. Скажімо, після вирізання гілки випуску (від стабільного майстра) запускається повна регресія, виробляються виправлення та розгортаються до виробництва. Це займе близько тижня. Ми випускаємо майже кожні два тижні до виробництва.
Наші гілки функцій завжди вирізані з головного і піддаються певній кількості тестувань розробника, перш ніж об'єднатися з мастером, на якому вони проходять перевірку стабільності CI-CD.
Виправлення виробляються на гілках виправлень (вирізані з гілок випуску) та розгортаються з мінімальним тестуванням впливу на виробництво.
Наша стратегія версій для випусків та виправлень гілок слідує semver. Відпустити гілки під час циклу QA через версії , як v2.0.0-rc1
, v2.0.0-rc2
і , нарешті , після QA знака-офф стала v2.0.0
.
Іноді ми робимо пунктирні випуски для невеликих функцій, які об'єднуються, щоб випустити гілки (а потім і освоїти), де стають версії v2.1.0
. І виправлення приймають v2.1.1
зразок.
Питання, однак, не полягає у версії цих гілок. Я вважаю за краще не змінювати цю схему версій взагалі. Єдина зміна стосується галузі розвитку, тобто. майстер. Як я можу надійно вказати в середовищі CI-CD, яка версія існує з попереднього випуску у виробництво. Це в ідеалі можна зробити за допомогою інтелектуального тегу на git, але бажано те, що не надмірно тегує головну гілку.
rc
суфіксу? Це буде диктувати major.minor
версію розробки. rc
а кількість збірки можна отримати виходячи лише з цього. Також rc
щодо master не має сенсу, оскільки ми ніколи не звільняємося від master. Сьогодні ми
rc
суфікс.