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

Используйте r10k с отдельными репозиториями модулей

У меня есть рабочая установка Puppet с Мастером и Агентом. Теперь я пытаюсь использовать r10k для управления кодом Puppet. Моя цель - чтобы на каждом git pushкода измените код Puppet ниже /etc/puppetlabs/code/environments на Мастере Марионеток обновляется автоматически.

Хотя это, похоже, работает для одного монолитного репозитория управления, содержащего все модули, я не могу заставить его работать, если пользовательские модули находятся в отдельных репозиториях Git.

Моя установка выглядит следующим образом:

конфигурация r10k в /etc/puppetlabs/r10k/r10k.yaml:

sources:
  operations:
    remote: '/srv/git/puppet.git'
    basedir: '/etc/puppetlabs/code/environments'

Центральный контрольный репозиторий /srv/git/puppet.git содержащие ветви production и testing, каждый с:

В Puppetfile для testing будет выглядеть, например,

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'HEAD'

в то время как для production это будет выглядеть, например,

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'stable'

(Пока это не работает, у меня есть только ветка production и ссылка на HEAD.)

Другой репозиторий Git для каждого настраиваемого модуля, например /srv/git/mymodule.git

Git Хуки запускать r10k всякий раз, когда git push выполняется:

Крючки выполняются, так как после git push Я получаю результат вроде

remote: INFO     -> Deploying environment /etc/puppetlabs/code/environments/production
remote: INFO     -> Environment production is now at 991830eb1561cddd7970be4152748168df52ef79
remote: INFO     -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/mymodule

и

remote: INFO     -> Deploying module /etc/puppetlabs/code/environments/production/modules/mymodule

Моя проблема в том, что, несмотря на этот вывод, изменения, отправленные в репозиторий модуля, не отражаются в файлах ниже /etc/puppetlabs/code/environments.


редактировать

Немного уточняю свой предполагаемый рабочий процесс:

Согласно вашему вопросу и комментариям:

Моя проблема в том, что, несмотря на этот вывод, изменения, отправленные в репозиторий модуля, не отражаются в файлах ниже /etc/puppetlabs/code/environments.

r10k не знает о HEAD. HEAD недетерминирован, поэтому его нельзя использовать таким образом.

Если вы хотите отследить branchиспользуйте что-нибудь вроде:

mod 'mymodule',
  :git => 'file:///srv/git/mymodule.git',
  :ref => 'master'

Чтобы упростить настройку, я хотел избежать ветвления. Вместо этого я хотел всегда использовать последнюю фиксацию репозитория модулей для тестирования и использовать другой стабильный тег для производства, который я продвигаю, когда код находится в приемлемой форме.

Честно говоря, я не уверен, как выглядит ваш рабочий процесс:

  • У вас контрольное репо с двумя ветвями, master и testing. master стабильный производственный код, пока вы используете testing для разработки?

  • Вы вводите новый код в testing, и как только он достигнет комфортного состояния, вы объедините testing в master?

  • После этого вы хотите отметить текущее состояние в master так как stable, что должны использовать ваши агенты?

  • Как выглядит остальная часть вашей инфраструктуры? Сколько агентов на месте? Как вы тестируете свой код, т. Е. Как сказать {one, all} (?) Агентам: «Пожалуйста, используйте этот код, полученный из этой среды»?

  • Выполните следующие действия: если у вас есть код в master и testing, как ваши агенты узнают, какую среду использовать?

  • Если бы вы могли подробнее остановиться на вышеупомянутых пунктах и ​​рассказать мне более подробную информацию (и, пожалуйста, добавьте это к своему вопросу, комментарии могут быть слишком ограниченными для этого), я мог бы помочь и расширить этот ответ.

  • В любом случае удачи! puppet и r10k, особенно в сочетании с хуками git, это отличная установка! Сам пользуюсь этим, просто здорово! :)

Дополнительная информация:

  • Спасибо за подробное описание вашего рабочего процесса.

  • Если вы еще не так универсальны с git, и особенно если вы делаете много ветвлений и слияний и боитесь конфликтов слияния, обязательно прочитайте о git rebase, что делает

    повторное применение фиксируется поверх другого базового наконечника

  • Допустим, вы находитесь в следующей ситуации:

    • Вы ответвляетесь master к feature1.
    • Вы работаете в file1:3-6 в feature1.
    • Ты меняешься file1:7-10 прямо в master чтобы исправить насущную ошибку.
    • Вы хотите слиться feature1 Вернуться в master.
    • Обычно в этот момент возникает конфликт слияния, потому что один и тот же файл был изменен в обеих ветвях.
    • Если вы это сделаете git rebase master пока на feature1 перед слиянием, это "вытянет" последнее состояние / фиксацию (я) в feature1, в этом случае исправление ошибки.
    • Теперь сделайте слияние, без конфликтов.
  • Я бы не стал ограничиваться только одной веткой в ​​репозиториях модулей. Как вы справляетесь с тестированием нового кода внутри? Со временем необходимо улучшать не только ваше контрольное репо.
  • Чтобы это было удобно, воспользуйтесь еще одной функцией r10k:

    # Track control branch and fall-back to master if no matching branch exists
    mod 'mymodule',
      :git => 'file:///srv/git/mymodule.git',
      :branch => :control_branch,
      :default_branch => 'master'
    
  • Это позволит вам сделать следующее, например, в ситуации, когда вы хотите разработать новую функцию в своем модуле:

    • В вашем контрольном репо ветка master к testing.
    • В репозитории вашего модуля ветка master к testing.
    • Без изменения вашего Puppetfile, ваш марионеточный агент, который использует testing филиал вашего контрольного репо сейчас также использует testing ветка вашего репозитория модуля.
    • Развивайте, пока не будете удовлетворены.
    • В репозитории вашего модуля объедините testing в master.
    • Новый код, который вы разработали, теперь будет доступен всем вашим марионеточным агентам, которые используют производственный код, т. Е. master филиал вашего контрольного репо.
  • И последнее замечание: похоже, что вы единственный человек, разрабатывающий код, так что, возможно, это не так важно для вас, а просто чтобы вы знали:

    • Если две ветки слишком ограничены, вполне возможно использовать другую среду во время запуска марионеточного агента без изменения конфигурации, но с помощью параметра cli:

      puppet agent -t --environment ${FEATURE_BRANCH}
      
  • Это все, о чем я могу думать. Надеюсь, это снова поможет, удачи и всего наилучшего!