Назад | Перейти на главную страницу

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 будет добавлено к производство с тестирование ветвь, которая могла быть фатальной. Это также предотвращает автоматическое объединение при успешном завершении всех тестов.

Как я могу изменить свои репозитории или рабочий процесс, чтобы предотвратить случайное слияние изменений, относящихся к ветке?

Замена жестко заданных имен сред, используемых в качестве ссылок в вашем Puppetfile с заменой переменной текущим именем среды поможет объединить ваш Puppetfile между ветвями.

Псевдо код:

mod 'ownmodule1',
  :git => 'https://git.example.org/configuration/ownmodule1.git',
  :ref => ${environment}

Для актуальный код см. этот ответ, но я не гарантирую, что он будет работать в вашей настройке, это немного взломано.

Но, конечно, для правильного развертывания вашей среды после этого изменения вам нужно будет создать production ветвь в ваших модулях вместе с testing и инициализировать их оба с минимальным набором кода для новых модулей.

PS Если этот ответ полезен, и вы решили проголосовать за него, пожалуйста, проголосуйте и за связанный ответ.

Начиная с версии r10k 2.4.0, возможно, чтобы модули марионетки соответствовали ветви в репозитории управления. На ветке testing, Puppetfile из моего вопроса может выглядеть так:

mod 'ownmodule1',
  :git => 'https://git.example.org/configuration/ownmodule1.git',
  :ref => :control_branch

Это приведет к ветке testing модуля собственный модуль для использования с r10k развертывание. Это довольно надежно. С участием :default_branch вы можете указать резервную ветку.