r10k: правильный процесс слияния с git
В настоящее время я работаю с Puppet в режиме без хозяина. Я использую r10k для развертывания модуля и среды.
Упрощенная версия: контрольный репозиторий r10k имеет две ветви: тестирование и производство. Изменения в производстве будут автоматически распространяться на рабочие серверы. Изменения в тестировании на некоторых промежуточных серверах.
Теперь, если я что-то меняю в тестировании, мне иногда приходится менять и контрольный репозиторий r10k. Типичным примером будет Puppetfile
, который в настоящее время выглядит так в производстве:
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'
Конфигурация для пользовательских модулей может выглядеть следующим образом в ветви тестирования:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'testing'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'testing'
Теперь коммит в тестировании может выглядеть так:
+mod 'ownmodule3,
+ :git => 'https://git.example.org/configuration/ownmodule3.git',
+ :ref => 'testing'
Если я объединю это с производством и не буду осторожен, то в производственную ветвь будет добавлен ownmodule3, что может быть фатальным. Это также предотвращает автоматическое объединение, когда все тесты успешны.
Как я могу изменить свои репозитории или рабочий процесс, чтобы предотвратить случайное объединение специфичных для отрасли изменений?
2 ответа
Начиная с r10k 2.4.0, модули марионеток могут соответствовать ветке в репозитории управления. На ветке testing
Кукольный файл из моего вопроса может выглядеть так:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => :control_branch
Это приведет к ветке testing
модуля ownmodule для использования с r10k deploy. Это довольно надежно. С :default_branch
Вы можете указать резервную ветку.
Замена жестко закодированных имен среды, используемых в качестве ссылок в вашем Puppetfile
переменная, замененная на имя текущей среды, поможет сделать Puppetfile доступным между ветвями.
Псевдокод:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => ${environment}
Фактический код см. В этом ответе, но я не гарантирую, что он будет работать в вашей настройке, он немного хакерский.
Но, конечно, чтобы правильно настроить ваши среды после этого изменения, вам придется создать production
ветвь в ваших модулях вместе с testing
и инициировать их оба с минимальным, но не компилирующим, но компилирующим кодом для новых модулей.
PS Если этот ответ полезен, и вы решите проголосовать за него, пожалуйста, добавьте ответ также.