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 Если этот ответ полезен, и вы решите проголосовать за него, пожалуйста, добавьте ответ также.

Другие вопросы по тегам