Я объяснял предлагаемую систему сборки (Gradle / Artifactory / Jenkins / Chef) одному из наших старших архитекторов, и он сделал мне комментарий, с которым я как- то не согласен, но у меня недостаточно опыта, чтобы реально взвесить.
Этот проект создает библиотеку Java (JAR) в качестве артефакта для повторного использования другими командами. Для управления версиями я бы хотел использовать семантический подход:
<major>.<minor>.<patch>
Где patch
указывает на исправление ошибок / аварийных ситуаций, minor
указывает на обратно-совместимые выпуски и major
указывает либо на массивный рефакторинг API, и / или обратно-несовместимые изменения.
Что касается доставки, то вот чего я хочу: разработчик фиксирует некоторый код; это запускает сборку в среде QA / TEST. Некоторые тесты проводятся (некоторые автоматизированы, некоторые ручные). Если все тесты пройдены, то производственная сборка публикует JAR для нашего внутреннего репозитория. К этому моменту JAR должен быть версионирован должным образом, и я подумал о том, чтобы использовать тот, build.number
который автоматически генерируется и предоставляется нашим инструментом CI, в качестве номера патча.
Таким образом, управление версиями будет:
<major>.<minor>.<build.number>
Опять же, где build.number
предоставляется инструмент CI.
Архитектор отклонил это, заявив, что использование номера сборки CI было «злоупотреблением» семантическим версионированием.
У меня вопрос: правильно ли это, и если да, то почему? И если нет, то почему?
Одна из причин заключается в том, что для исправления может потребоваться несколько сборок, поэтому, если у вас версия 5.7, и вы хотите установить исправление до 5.7.1, но ваши первые 2 исправления не удастся собрать, когда они будут отправлены в систему CI, вы будете на 5.7.3, прежде чем вы выпустили свой первый патч!
Ответ состоит в том, чтобы просто использовать 4 цифры (как это обычно бывает в системах Microsoft). Четвёртый номер сборки и используется «только для информации». Обычно люди помещают туда номер версии репозитория (если они используют SVN или TFS или аналогичный), что очень удобно, поскольку вы можете проверить, какой именно коммит был использован для сборки двоичных файлов. Если у вас нет такой вещи, то номер сборки CI является разумным приближением (поскольку вы надеетесь, что ваша система CI сможет запомнить номера сборок и связать их с историей репо, но вы не зависите от CI система запоминает их - вы никогда не сможете удалить старые сборки).
Стоит отметить, что схема Microsoft для управления версиями использует третью позицию для номеров сборок. Chrome использует только 1 номер. Ubuntu использует дату. Не существует «стандарта» для использования , за исключением того, что все числа должны увеличиваться.
источник