Версионирование
Версионирование — ключевая особенность Chill, позволяющая избегать развертывания несовместимых версий. Chill придерживается спецификации вида vmajor.minor.patch, аналогичной семантическому версионированию.
- Мажорная (major) версия увеличивается при внесении несовместимых изменений.
- Минорная (minor) версия увеличивается при развертывании новой
production-версии сервиса. - Патч (patch)-версия увеличивается системой Chill автоматически при каждом развертывании
development-версии сервиса.
Части версии
Мажорная версия
Смысл увеличения мажорной версии заключается в том, чтобы при внесении несовместимых изменений клиенты — как внешние, так и другие зависимые сервисы — не перешли автоматически на эту версию.
Случаи, когда увеличивается мажорная версия:
- При внесении обратно не совместимых изменений в API сервиса: в этом случае при синхронизации (
chill-cli sync) мажорная версия увеличится автоматически. - Не все несовместимые изменения могут быть описаны только в декларации API: например, метод сервиса может начать возвращать в новой версии другой код ошибки в той же ситуации, что и в старой версии, и на это может быть завязана логика работы зависящих от этого сервиса клиентов. В этом случае разработчик может вручную увеличить мажорную версию через
chill-cli force major.
Заметка
Новая мажорная версия развертывается как отдельная Knative-служба.
Минорная версия
Смысл увеличения минорной версии — в том, чтобы переключить клиентов (всех или некоторую часть) на новую production-версию сервиса, обратно совместимую со старой.
Она увеличивается автоматически при развертывании новой версии, для который вызвано chill-cli stage production.
Патч-версия
Патч-версия увеличивается автоматически при каждой публикации development-версии.
Контракт увеличения версий
Исходя из сказанного выше, в системе Chill выполняется следующий контракт для версий:
- Мажорные версии в общем случае не совместимы друг с другом.
- В рамках одной мажорной версии для минорных версий с патч-версией 0 отношение совместимости рефлексивно, транзитивно и антисимметрично; таким образом,
v1.5.0совместима сv1.3.0,v1.3.0совместима сv1.1.0,v1.5.0совместима сv1.1.0,v1.1.0не совместима сv1.3.0.
- Патч-версии в рамках одной мажорной и минорной в общем случае совместимы с патч-версией 0, но не совместимы друг с другом.