. У меня есть рабочая настройка Puppet с Мастером и Агентом. Теперь я пытаюсь использовать r10k для управления кодом Puppet. Моя цель состоит в том, чтобы при каждом git push
кода изменять код Puppet ниже / etc / puppetlabs / code / environments
на Мастере Марионеток обновлялся автоматически.
Хотя это кажется для работы с одним монолитным репозиторием управления, содержащим все модули, я не могу заставить его работать, если пользовательские модули находятся в отдельных репозиториях Git.
Моя установка следующая:
конфигурация r10k в / etc / puppetlabs / r10k / r10k.yaml
:
sources:
operations:
remote: '/srv/git/puppet.git'
basedir: '/etc/puppetlabs/code/environments'
Центральный контрольный репозиторий /srv/git/puppet.git
, содержащий ветки производство
и тестирование
, каждый с: git / hooks / post-receive
с содержимым r10k deploy module mymodule -v
Перехватчики запускаются, поскольку после git push
я получаю выходные данные типа
remote: INFO -> Deploying environment /etc/puppetlabs/code/environments/production
remote: INFO -> Environment production is now at 991830eb1561cddd7970be4152748168df52ef79
remote: INFO -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/mymodule
и
remote: INFO -> Deploying module /etc/puppetlabs/code/environments/production/modules/mymodule
Моя проблема заключается в том, что - несмотря на этот вывод - изменения, внесенные в репозиторий модуля, не отражаются в файлах ниже / etc / puppetlabs / code / environments
.
Edit
Немного дорабатываем мои намерения рабочий процесс:
производственная
и тестирование
, в то время как репозиторий модулей имеет только одну ветку master
. Я думал, что так будет проще, особенно во избежание проблем слияния. Но учитывая, что в Git слияния могут быть ограничены быстрой перемоткой вперед, а r10k имеет активную поддержку отслеживания ветвей, мой рабочий процесс может быть проще, если использовать ветки производство
и тестирование
для репозиториев модулей. Затем я бы работал (разрабатывал) над тестированием
и переключался на production
, чтобы выполнить что-то вроде git merge --ff-only testing
. стабильный
для репозитория модуля, который я время от времени перемещаю в текущую фиксацию, то есть все время оставаясь в ветке master
без какого-либо слияния, выполняемого в все. Но слияние веток только с перемоткой вперед также может спасти меня от конфликтов слияния, поэтому, вероятно, нет причин избегать ветвей. Также я мог получить тот же рабочий процесс как для контрольного репозитория, так и для репозитория модуля. рабочую среду
, а другой - на тестирование
, чтобы я мог проверить свой рабочий процесс, создавая пригодную для использования конфигурацию Puppet для агентов. На данный момент я просто настрою среду в файле puppet.conf
каждого агента. testing
, а все остальные с производства
. Мастер будет на другом компьютере и настроен вручную. Согласно вашему вопросу и комментариям:
Моя проблема в том, что, несмотря на этот вывод, изменения, помещенные в репозиторий модуля, не отражаются в файлах ниже
/ etc / puppetlabs / code / environment
.
r10k
не знает о HEAD
. HEAD
не является детерминированным, поэтому его невозможно использовать таким образом.
Если вы хотите отслеживать ветвь
, используйте что-то вроде:
mod 'mymodule',
:git => 'file:///srv/git/mymodule.git',
:ref => 'master'
Чтобы упростить настройку Я хотел избежать ветвления. Вместо этого я хотел всегда использовать последнюю фиксацию репозитория модулей для тестирования и использовать другой стабильный тег для производства, который я продвигаю, когда код находится в приемлемой форме.
Честно говоря, я не уверен, как выглядит ваш рабочий процесс:
У вас есть контрольное репо с двумя ветвями, master
и testing
. master
- это стабильный производственный код, а вы используете тестирование
для разработки?
Вы отправляете новый код в тестирование
, а когда он достигает удобного для вас состояния, вы объединяете тестирование
в master
?
После этого вы хотите отметить текущее состояние в master
] как стабильный
, который должны использовать ваши агенты?
Как выглядит остальная часть вашей инфраструктуры? Сколько агентов на месте? Как вы тестируете свой код, то есть как вы говорите {one, all} (?) Агентам: «Пожалуйста, используйте этот код, полученный из этой среды»?
Следуйте приведенным выше мерам: Если у вас есть код в master
и testing
, как ваши агенты узнают, какую среду использовать?
Если бы вы могли подробнее остановиться на вышеупомянутых пунктах и сообщить мне более подробную информацию (и, пожалуйста, добавьте это к вашему вопросу , комментарии могут быть слишком ограничены для этого), я мог бы помочь и расширить этот ответ.
В любом случае, удачи! puppet
и r10k
, особенно в сочетании с хуками git, - отличная установка! Сам пользуюсь этим, просто здорово! :)
Дополнительная информация:
Спасибо за подробное описание вашего рабочего процесса.
Если вы еще не настолько универсальны с git, и особенно если вы делаете много ветвлений и слияний и боитесь слияния конфликты, обязательно прочтите о git rebase , который
повторно применяет коммиты поверх другой базовой подсказки
Допустим, вы находитесь в следующей ситуации:
master
в feature1
. file1: 3-6
в feature1
. file1: 7-10
непосредственно в master
, чтобы исправить ошибку. feature1
обратно в master
. git rebase master
при использовании feature1
перед слиянием, это "вытянет" последнее состояние / фиксацию (я) в на feature1
, в данном случае исправление ошибки. Чтобы сделать это удобным, используйте другую функцию r10k
:
# Отслеживайте управляющую ветвь и переходите к мастеру, если нет подходящей ветки существует
мод 'mymodule',
: git => 'file: ///srv/git/mymodule.git',
: branch =>: control_branch,
: default_branch => 'мастер'
Это позволит вам сделать следующее, например, в ситуации, когда вы хотите разработать новую функцию в своем модуле:
master
до ] testing
. master
до testing
. Puppetfile
, вашего марионеточного агента, который теперь использует ветвь testing
вашего контрольного репозитория также использует ветвь testing
репозитория вашего модуля. testing
в master
. master
вашего контрольного репозитория. И последнее замечание, на данный момент: похоже, что вы единственный человек, разрабатывающий код, так что, возможно, это это не так важно для вас, но просто чтобы вы знали:
Если две ветви слишком ограничены, вполне возможно использовать другую среду во время запуска марионеточного агента без изменения конфигурации, но с помощью параметра cli:
марионеточный агент -t - среда $ {FEATURE_BRANCH}