На ваш первый вопрос:
Как мы можем избежать "бесполезных" коммитов CI, которые просто увеличивают
номер версии?
Пожалуйста, выберите Непрерывная интеграция (CI) - это практика разработки, которая проверяет каждый check-in
с помощью автоматической сборки, позволяя командам обнаруживать проблемы на ранних этапах.
Сказав это, хотел бы сформулировать здесь:
Из практики: Каждый коммит должен основываться на интеграции
машина
Как это сделать: Сервер CI контролирует хранилище и проверяет изменения, когда они происходят
Проще говоря, сервер CI должен улучшать версию только и только при наличии нового коммита и , таким образом, проверяя каждый код коммит высвобождается.
Похоже из OP, что в вашем районе больше (как вы сказали) "бесполезных" commits
от CI server
.
Основываясь на вашем механизме CI, я надеюсь, что вы должны / должны иметь возможность управлять им, почти есть способы справиться с каждым инструментом, который мы используем. (Например: webhooks в bitbucket, плагин версии и т. Д.).
Итак, убедившись, что только после нового коммита у нас есть новая версия.
Теперь, если вы думаете об этих обычных ночных сборках интеграции, тогда читайте ниже:
Многие организации выполняют регулярные сборки по расписанию, например, каждую ночь. Это не то же самое, что непрерывная сборка, и ее недостаточно для непрерывной интеграции . Суть непрерывной интеграции заключается в том, чтобы как можно быстрее находить проблемы. Ночные сборки означают, что ошибки лежат незамеченными целый день, прежде чем их обнаружат. Когда они находятся в системе так долго, их поиск и удаление занимает много времени.
Также вы упомянули: Каждый коммит, который проходит CI, является новой версией , таким образом, вы уже находитесь на истинном CI.
Несмотря на это, если вы все еще не можете понять, как можно избежать "useless"
commits
номера версии, то я бы предложил добавить еще один вопрос с подробным описанием того, как работает ваш механизм CI и почему это сложно с заданными условиями.
Бьюсь об заклад, должно быть решение. Также посмотрите на GithubFlowVsGitFlow .
источник: Белая книга Мартина Фаулера о CI
Как избежать сохранения номера версии в исходном коде?
По этому поводу хотелось бы расширить @void ответ, как там сказано:
It is a common practice to keep a version number in the source code, there is nothing wrong in that.
Существуют проекты, которые должны знать точное version
, развернутое (по некоторым важным причинам xy) в таких сценариях, они сохраняют версию в исходном коде и HTTP GET
API для извлечения из развернутого кода (один из способов сделать это ) чтобы узнать версию, развернутую в настоящее время на X сервер .
Однако это больше по требованию, предположим, что для другого проекта такой ситуации не существует, тогда рекомендуемый способ сохранить version
использует commit
хэш / tagging
каждый успешную сборку CI.
Вы можете получить более подробную информацию здесь :
Надеюсь, это поможет.