Версия продукта, например v1.0.0.100
, представляет собой не только уникальный производственный выпуск программного обеспечения, но и помогает определить наборы функций и этапы исправлений для указанного продукта. Прямо сейчас я вижу два способа поддержки окончательной версии пакета / сборки / двоичной версии продукта:
Контроль версий. Файл где-то хранит номер версии. На сервере сборки Continuous Integration (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
трудно? Если это единственный конфликт в слиянии двух ветвей, я бы посчитал себя счастливчиком. Как часто это происходит? Если это происходит, разве не стоит задуматься о том, какой номер версии должна иметь объединенная версия? (Извините за неоднозначное использование слова «версия».)