В настоящее время я запускаю Puppet в режиме без мастера. Я использую r10k для развертывания модуля и среды.
Упрощенная версия: репозиторий управления r10k имеет две ветви: тестирование и производство . Изменения в производстве будут автоматически распространяться на рабочие серверы. Изменения в тестировании на некоторых промежуточных серверах.
Теперь, если я что-то меняю в тестировании, мне иногда также приходится менять контрольный репозиторий r10k. Типичным примером может служить Puppetfile
, который в настоящее время выглядит так в production :
forge 'forge.puppetlabs.com'
# Forge modules
mod 'puppetlabs/stdlib'
mod 'puppetlabs/concat'
mod 'saz/ssh'
# Custom modules
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'production'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'production'
Конфигурация настраиваемых модулей может выглядеть так в ветке testing :
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'testing'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'testing'
Теперь фиксация в testing может выглядеть так:
+mod 'ownmodule3,
+ :git => 'https://git.example.org/configuration/ownmodule3.git',
+ :ref => 'testing'
Если я объединю это в production , и не будьте осторожны, ownmodule3 будет добавлен в production с ветвью testing , что может быть фатальным. Это также предотвращает автоматическое объединение, когда все тесты проходят успешно.
Как я могу изменить свои репозитории или рабочий процесс, чтобы предотвратить случайное объединение изменений, относящихся к ветке?
Начиная с версии r10k 2.4.0 , возможно, чтобы модули марионеток соответствовали ветви в репозитории управления. В ветке тестирование
Puppetfile из моего вопроса может выглядеть так:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => :control_branch
Это приведет к использованию ветки тестирования
модуля ownmodule в r10k deploy . Это довольно надежно. С помощью : default_branch
вы можете указать резервную ветвь.
Замена жестко запрограммированных имен среды, используемых в качестве ссылок в вашем файле Puppetfile
, на переменную, заменяемую текущим именем среды, поможет сделать ваш Puppetfile объединяемым между ветвями.
Pseudo код:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => ${environment}
Для фактического кода см. этот ответ , но я не гарантирую, что он будет работать в вашей настройке, это немного взломано.
Но из Конечно, чтобы ваши среды правильно развертывались после этого изменения, вам нужно будет создать ветвь production
в своих модулях вместе с testing
и запустить их обе с минимальным, без операций, но с компиляцией кода для новых модулей.
PS Если этот ответ полезен, и вы решили проголосовать за него, пожалуйста, проголосуйте и за связанный ответ.