О версиировании кулинарной книги
Версия кулинарной книги представляет собой набор функциональности, отличающийся от кулинарной книги, на которой она основана. Версия может существовать по многим причинам, таким как обеспечение правильного использования стороннего компонента, исправление ошибки или добавление улучшения. Версия кулинарной книги определяется с помощью синтаксиса и операторов, может быть связана со средами, метаданными кулинарной книги и/или списками выполнения и может быть заморожена (для предотвращения нежелательных обновлений).
Версия кулинарной книги поддерживается так же, как и сама кулинарная книга, в отношении контроля версий, загрузки на сервер Chef Infra и того, как клиент Chef Infra применяет эту кулинарную книгу при конфигурировании узлов.
Синтаксис
Версия кулинарной книги всегда имеет вид x.y.z, где x, y и z — десятичные числа, используемые для представления основных (x), второстепенных (y) и исправленных (z) версий. Также допускается версия из двух частей (x.y). Не допускаются буквенно-цифровые номера версий (1.2.a3) и номера версий с более чем тремя частями (1.2.3.4).
Ограничения
Ограничение версии — это строка, объединяющая синтаксис версии кулинарной книги с оператором, в следующем формате:
operator cookbook_version_syntax
Примечание
1.0 или 1.0.1; не используйте 1. Можно использовать следующие операторы:
| Оператор | Описание |
|---|---|
= | равен |
> | больше |
< | меньше |
>= | больше или равно; также известно как «оптимистически больше» или «оптимистическое» |
<= | меньше или равно |
~> | приблизительно больше; также известно как «пессимистически больше» или «пессимистическое» |
Например, ограничение версии «равно версии 1.0.7» выражается следующим образом:
= 1.0.7
Ограничение версии «больше версии 1.0.2» выражается следующим образом:
> 1.0.2
Оптимистическое ограничение версии — это ограничение, которое ищет версии, большие или равные указанной версии. Например:
>= 2.6.5
будет соответствовать кулинарным книгам, большим или равным 2.6.5, таким как 2.6.5, 2.6.7 или 3.1.1.
Пессимистическое ограничение версии — это ограничение, которое найдет максимальное значение версии в диапазоне, заданном номером второстепенной версии или номером исправленной версии. Например, пессимистическое ограничение для номеров второстепенных версий:
~> 2.6
будет соответствовать кулинарным книгам, большим или равным версии 2.6, но меньшим версии 3.0.
Или пессимистическое ограничение версии для номеров исправленных версий:
~> 2.6.5
будет соответствовать кулинарным книгам, большим или равным версии 2.6.5, но меньшим версии 2.7.0.
Или пессимистическое ограничение версии, которое соответствует кулинарным книгам, меньшим номера версии:
< 2.3.4
или будет соответствовать кулинарным книгам, меньшим или равным определенной версии:
<= 2.6.5
Метаданные
Каждая кулинарная книга требует небольшого количества метаданных. Содержимое файла metadata.rb предоставляет информацию, которая помогает клиенту и серверу Chef Infra правильно развертывать кулинарные книги на каждом узле.
Файл metadata.rb:
- Расположен на верхнем уровне структуры каталога кулинарной книги.
- Компилируется при каждой загрузке кулинарной книги на сервер Chef Infra или при выполнении подкоманды
knife cookbook metadata, а затем сохраняется как данные JSON. - Автоматически создаётся утилитой knife при выполнении подкоманды
knife cookbook create. - Редактируется с помощью текстового редактора, а затем повторно загружается на сервер Chef Infra в рамках загрузки кулинарной книги.
Версии и ограничения версий можно указать в файле метаданных кулинарной книги metadata.rb, используя следующие функции. Каждая функция принимает имя и необязательное ограничение версии; если ограничение версии не указано, используется значение >= 0.0.0 по умолчанию.
| Функция | Описание |
|---|---|
|
Показывает, что кулинарная книга зависит от другой кулинарной книги. Используйте ограничение версии для определения зависимостей версий кулинарных книг: или: или: |
provides | Добавляет рецепт, определение или ресурс, предоставляемый этой кулинарной книгой, если автоматически сгенерированный список недостаточен. |
supports | Показывает, что кулинарная книга поддерживает платформу. Используйте ограничение версии для определения зависимостей от версий платформ: < (меньше), <= (меньше или равно), = (равно), >= (больше или равно), ~> (приблизительно больше) или > (больше). Для указания более одной платформы используйте более одного поля supports, по одному для каждой платформы. |
Среды
Среда может использовать ограничения версий для указания списка разрешённых версий кулинарной книги, указав имя кулинарной книги и ограничение версии. Например:
cookbook 'apache2', '~> 1.2.3'
Или:
cookbook 'runit', '= 4.2.0'
Если кулинарной книге явно не указано ограничение версии, среда предположит, что у кулинарной книги нет ограничений версии, и будет использовать любую версию этой кулинарной книги с любым узлом в среде.
Замораживание версий
Версия кулинарной книги может быть заморожена, что предотвратит обновление этой версии кулинарной книги. (Пользователь всегда может загрузить новую версию кулинарной книги.) Использование замороженных версий кулинарных книг в средах — надёжный способ защитить производственную среду от случайных обновлений во время тестирования изменений в инфраструктуре разработки.
Например, чтобы заморозить версию кулинарной книги с помощью утилиты knife, введите:
knife cookbook upload redis --freeze
Результат:
Uploading redis...
Upload completed
После заморозки версии кулинарной книги обновление возможно только с использованием параметра --force. Например:
knife cookbook upload redis --force
Без параметра --force будет возвращена ошибка, похожая на:
Version 0.0.0 of cookbook redis is frozen. Use --force to override
Контроль версий версий
При использовании контроля версий в процессе управления кулинарными книгами следует учитывать две стратегии:
- Использовать максимальный контроль версий, когда важно сохранить все данные в системе контроля версий.
- Использовать отслеживание ветвей, когда кулинарные книги управляются в разных средах с помощью ветвей Git, а политика версионирования уже сохранена в метаданных кулинарной книги.
Отслеживание ветвей
Стратегия отслеживания ветвей требует, чтобы для каждой среды существовала ветвь в системе контроля версий, и чтобы политика версионирования каждой кулинарной книги отслеживалась на уровне ветви. Этот подход относительно прост и легк: для сред разработки, отслеживающих последние кулинарные книги, достаточно увеличить номер версии перед загрузкой кулинарной книги для тестирования. Для кулинарных книг, требующих более высокого уровня контроля версий, knife позволяет загружать кулинарные книги в определённые среды и замораживать кулинарные книги (что предотвращает внесение изменений в эту кулинарную книгу другими пользователями).
Типичный рабочий процесс с использованием стратегии отслеживания ветвей включает:
- Изменение номера версии по мере необходимости.
- Внесение изменений в кулинарную книгу.
- Загрузка и тестирование кулинарной книги.
- Перенос протестированной кулинарной книги в производство.
Например, для изменения номера версии сначала внесите изменения в кулинарную книгу, а затем загрузите и протестируйте её. Повторяйте этот процесс по мере необходимости, а затем загрузите её с помощью команды knife, подобной:
knife cookbook upload my-app
По завершении кулинарной книги перенесите эти изменения в производственную среду и используйте параметр --freeze для предотвращения внесения дальнейших изменений:
knife cookbook upload my-app -E production --freeze
Максимальные версии
Стратегия максимального контроля версий требуется, когда все данные необходимо отслеживать в системе контроля версий. Этот подход очень похож на стратегию отслеживания ветвей во время разработки и тестирования кулинарной книги, но более сложен и трудоемок (и требует редактирования файлов для данных среды) для развертывания кулинарной книги в производственную среду.
Типичный рабочий процесс с максимальной стратегией контроля версий включает:
- Изменение номера версии по мере необходимости.
- Внесение изменений в кулинарную книгу.
- Загрузка и тестирование кулинарной книги.
- Перенос протестированной кулинарной книги в производство.
Например, для изменения номера версии сначала внесите изменения в кулинарную книгу, а затем загрузите и протестируйте её. Повторяйте этот процесс по мере необходимости, а затем загрузите её с помощью команды knife, подобной:
knife cookbook upload my-app
После завершения кулинарной книги перенесите эти изменения в производственную среду и используйте параметр --freeze для предотвращения дальнейших изменений:
knife cookbook upload my-app -E production --freeze
Затем измените среду, чтобы она отдавала предпочтение только что загруженной версии:
(vim|emacs|mate|ed) YOUR_REPO/environments/production.rb
Загрузите обновлённую среду:
knife environment from file production.rb
А затем разверните новую версию кулинарной книги.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/cookbook_versioning/