Использовать 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 , содержащий ветки производство и тестирование , каждый с: git / hooks / post-receive

с содержимым r10k deploy module mymodule -v

Перехватчики запускаются, поскольку после 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 .


Edit

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

  • У моего контрольного репозитория есть две ветви, производственная и тестирование , в то время как репозиторий модулей имеет только одну ветку master . Я думал, что так будет проще, особенно во избежание проблем слияния. Но учитывая, что в Git слияния могут быть ограничены быстрой перемоткой вперед, а r10k имеет активную поддержку отслеживания ветвей, мой рабочий процесс может быть проще, если использовать ветки производство и тестирование для репозиториев модулей. Затем я бы работал (разрабатывал) над тестированием и переключался на production , чтобы выполнить что-то вроде git merge --ff-only testing .
  • Мой первый мысль заключалась в том, чтобы создать тег Git стабильный для репозитория модуля, который я время от времени перемещаю в текущую фиксацию, то есть все время оставаясь в ветке master без какого-либо слияния, выполняемого в все. Но слияние веток только с перемоткой вперед также может спасти меня от конфликтов слияния, поэтому, вероятно, нет причин избегать ветвей. Также я мог получить тот же рабочий процесс как для контрольного репозитория, так и для репозитория модуля.
  • I ' Я только начинаю узнавать о Puppet с двумя виртуальными машинами, одним мастером Puppet и одним агентом. Я добавлю еще один агент виртуальной машины и затем укажу один на рабочую среду , а другой - на тестирование , чтобы я мог проверить свой рабочий процесс, создавая пригодную для использования конфигурацию Puppet для агентов. На данный момент я просто настрою среду в файле puppet.conf каждого агента.
  • Позже я воспользуюсь настоящими ящиками Linux и сопоставлю один агент с testing , а все остальные с производства . Мастер будет на другом компьютере и настроен вручную.
1
задан 4 October 2017 в 17:34
1 ответ

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

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

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

Если вы хотите отслеживать ветвь , используйте что-то вроде:

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

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

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

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

  • Вы отправляете новый код в тестирование , а когда он достигает удобного для вас состояния, вы объединяете тестирование в master ?

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

  • Как выглядит остальная часть вашей инфраструктуры? Сколько агентов на месте? Как вы тестируете свой код, то есть как вы говорите {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 :

     # Отслеживайте управляющую ветвь и переходите к мастеру, если нет подходящей ветки  существует
    мод 'mymodule',
      : git => 'file: ///srv/git/mymodule.git',
      : branch =>: control_branch,
      : default_branch => 'мастер'
     
  • Это позволит вам сделать следующее, например, в ситуации, когда вы хотите разработать новую функцию в своем модуле:

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

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

       марионеточный агент -t - среда $ {FEATURE_BRANCH}
       
  • Это все, о чем я могу думать. Надеюсь, это еще раз поможет, удачи и всего наилучшего!
0
ответ дан 4 December 2019 в 04:34

Теги

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