Я управляю своими кулинарными книгами Chef с помощью Berkshelf и борюсь с частью загрузки в конвейере непрерывной интеграции.
Следуя рекомендациям, найденным в Интернете, я использую thor-scmversion
для управления версиями моей кулинарной книги. Поэтому я добавил файл VERSION
в .gitignore
и получил версию поваренной книги только в качестве тега в репозитории git.
Чтобы получить текущую версию моей поваренной книги в ее метаданных, я использую следующий помощник в metadata.rb
require 'thor-scmversion'
def current_version
version = IO.read(File.join(File.dirname(__FILE__), 'VERSION')) rescue nil
version ||= ThorSCMVersion.versioner.from_path rescue nil
version ||= '0.1.0'
version
end
# ...
version current_version
# ...
Моя проблема возникает, если я хочу установить зависимости поваренной книги с berks install
.
Предположим, у меня есть кулинарная книга env_lampstack
, которая зависит от кулинарной книги app_apache ~> 1.0.1
. Поэтому я использую следующую строку в env_lampstack Berksfile
:
cookbook 'app_apache', git: '...', branch: '1.0.1'
Причина этого в том, что когда Berkshelf пытается разрешить зависимости, папка .git
удаляется из рабочего каталога поваренной книги до того, как метаинформация будет прочитана. Следовательно, мой вспомогательный метод не получит правильную версию из тега git, и Berkshelf выдает исключение.
Учитывая следующие ограничения:
Я хочу, чтобы мой CI-сервер (и никто другой) управлял версиями моей кулинарной книги
Я не могу загрузить свои кулинарные книги в общедоступный супермаркет и не хочу создавать его самостоятельно.
Я могу найти следующие решения:
Я храню файл
VERSION
в репозитории git - проблема: мне нужно, чтобы мой CI-сервер проталкивался в репозиторий, который подвержен ошибкамЯ создаю
metadata.json
на сервере CI и помещаю его в свой репозиторий - проблема: снова - подвержен ошибкамЯ загружаю КАЖДУЮ версию каждой поваренной книги (каждый коммит) на сервер Chef, независимо от того, «нужна» она мне или нет. использовать ветки функций, и я должен снова позаботиться о порядке загрузки кулинарных книг.
Есть ли рекомендуемый рабочий процесс для решения этой проблемы? Что такое «Путь Berkshelf» в управлении версиями и зависимостями поваренной книги.
Любая помощь будет высоко оценена - большое спасибо!