r10k: правильный рабочий процесс слияния с git

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

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

4
задан 7 July 2016 в 12:40
2 ответа

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

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

Это приведет к использованию ветки тестирования модуля ownmodule в r10k deploy . Это довольно надежно. С помощью : default_branch вы можете указать резервную ветвь.

1
ответ дан 3 December 2019 в 03:40

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

Pseudo код:

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

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

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

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

2
ответ дан 3 December 2019 в 03:40

Теги

Похожие вопросы