Berkshelf не может определить версию поваренной книги из тега Git

Я управляю своими кулинарными книгами 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» в управлении версиями и зависимостями поваренной книги.

Любая помощь будет высоко оценена - большое спасибо!


person Michael Lihs    schedule 25.08.2015    source источник
comment
Есть плагин-нож, который может помочь очистить сервер шеф-повара от неиспользуемых поваренных книг. См. список плагинов для ножей и, в частности, knife-cleanup. Возможно, knife-github-cookbooks тоже может пригодиться.   -  person Tensibai    schedule 25.08.2015


Ответы (1)


Вам понадобится какой-то репозиторий артефактов для «выпущенных» поваренных книг, в которых уже запечены метаданные. Обычно это организация Chef Server, которая не используется ни для чего другого, кроме как для хранения кулинарных книг, а затем на нее указывает служба berks-api. Это по-прежнему не позволит вам использовать предварительные версии.

Лично я просто курирую свой metadata.rb, а не полагаюсь на данные scm, и не позволяю CI изменять его. Релизы обычно должны быть процессом, инициируемым человеком.

person coderanger    schedule 26.08.2015