Версія продукту, наприклад v1.0.0.100
, являє собою не лише унікальний випуск програмного забезпечення, але допомагає визначити набори функцій та етапи виправлення для цього продукту. Зараз я бачу два способи збереження остаточного пакета / збірки / бінарної версії продукту:
Контроль версій. У файлі десь зберігається номер версії. Сервер збирання безперервної інтеграції (CI) матиме сценарій для створення програмного забезпечення, яке використовує цей зареєстрований номер версії, щоб застосувати його до всіх областей необхідного програмного забезпечення (бінарні файли, пакети встановлення, довідкові сторінки, документація тощо).
Параметри середовища та / або побудови. Вони підтримуються поза контролем версій (тобто вони не прив’язані до знімка / тегу / гілки). Сценарії збірки розподіляють і використовують число однаково, однак вони просто отримують значення по-різному (воно надається сценарію збірки, замість того, щоб сценарій знав, де його взяти відносно дерева-джерела).
Проблема першого підходу полягає в тому, що він може ускладнювати злиття між магістральними гілками. Якщо ви все ще підтримуєте 2 паралельних версії одного і того ж програмного забезпечення, ви вирішите конфлікти при злитті між двома основними лініями, якщо версія змінилася на обидва з моменту останнього злиття.
Проблема другого підходу - примирення. Повертаючись до випуску 1 рік тому, ви будете покладатися виключно на інформацію тегів, щоб ідентифікувати його номер випуску.
В обох випадках можуть бути певні аспекти номера версії, які не відомі до складання CI. Наприклад, збірка CI може програмно розміщуватись у 4-му компоненті, який є справді автоматизованим номером збірки (наприклад, 140-й збір на гілці). Це також може бути номер ревізії в VCS.
Який найкращий спосіб не відставати від номера версії програмного забезпечення? Чи слід завжди підтримувати "відомі" деталі у VCS? І якщо так, то чи конфлікти між основними галузями є проблемою?
Зараз ми підтримуємо номер нашої версії за допомогою параметрів, визначених та підтримуваних у плані збірки CI (Atlassian Bamboo). Ми повинні бути обережними перед тим, як об’єднатись у нашу master
гілку, що номери версій правильно налаштовані перед початком складання CI . Що стосується робочого процесу Gitflow, я вважаю, що якби номер версії відслідковувався у контролі джерела, ми могли б гарантувати, що він налаштований належним чином, коли ми створюємо нашу release
гілку під час підготовки до випуску. QA здійснить остаточне тестування на інтеграцію / дим / регресію на цій гілці та після входу відбувається злиття, master
яке сигналізує про зобов'язання звільнитись.
version.txt
де одна версія містить єдиний рядок,1.0.7
а інша1.2.0
насправді важко вирішити? Якщо це єдиний конфлікт у об'єднанні двох гілок, які розійшлися, я вважаю себе дуже щасливим. Як часто це трапляється? Якщо це все-таки трапляється, чи не дуже добре, що ви змушені думати про те, який номер версії повинен мати об'єднана версія? (Вибачте за неоднозначне вживання слова "версія".)