Давайте начнем с выпусков. Будет ли версия выпущена или нет, будет решено в будущем, когда уже созданный двоичный файл будет развернут в средах TST и проверен. При фиксации или построении вы не можете предсказать, будет ли версия «релизом».
Как только вы откажетесь от этих идей, все станет намного проще. И поскольку вы не можете использовать версии на основе веток для выпусков, какой смысл отличать ветки компонентов от других? Вы также можете забыть о смешении концепций ветвления и управления версиями.
С помощью Continuous Delivery (вы можете заимствовать ее идеи, даже если вы не используете ее в полной мере), любая сборка может потенциально go PRD, таким образом:
- Создайте двоичный файл с любым типом версий, который вам нравится. С Maven проще всего придерживаться SNAPSHOT * и никогда не использовать «релиз». Он уникальный, стандартный, у него есть некоторые преимущества с Nexus (политики хранения).
- Когда вы будете готовы go к PRD и выбрана версия выпуска - пометьте его как-нибудь. Это может быть задание CI, которое отслеживает все развертывания PRD; или у вас может быть страница со всеми версиями выпуска; или вы можете перенести бинарный файл в другой репозиторий Maven (по-прежнему может иметь тип SNAPSHOT). Последнее удобно, если вы go используете политики хранения для снимков.
Также мы обычно хотим указать, из какого коммита был создан бинарный файл. Вы можете поместить это в двоичный файл (что-то вроде version.properties
) во время сборки. Вы даже можете создать конечную точку в своем приложении, которая будет обслуживать эту версию для удобства.
PS: если вы просто хотите следовать советам GitFlow - есть официальная страница для управления версиями. Но у вас будут все проблемы (и даже больше), о которых вы уже упоминали в этом вопросе.
* Maven автоматически разрешает версии SNAPSHOT в метки времени. Но вы на самом деле не можете использовать эту функциональность, потому что временная метка будет отличаться для разных артефактов во время сборки. Если вы хотите сохранить одинаковую версию во всех двоичных файлах сборки, вам нужно сгенерировать и назначить версию метки времени вручную, используя versions:set
. Это не сложно, но стоит упомянуть.