Я объяснял предлагаемую систему сборки (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 было «злоупотреблением» семантическим версионированием.
У меня вопрос: правильно ли это, и если да, то почему? И если нет, то почему?