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

Как работать с одним репозиторием git на 2 серверах: производственный и тестовый?

У нас есть единый репозиторий git на тестовом сервере (назовем его test1). Репозиторий очень прост, просто не нужно осваивать веток или чего-то особенного. Цель этого репо - отслеживать изменения в / etc / puppet и всех его подпапках. Обычно он чистый и синхронизируется с головой.

Теперь мы хотим скопировать все в test1: / etc / puppet на рабочий сервер (назовем его prod1), сохраняя при этом правильный рабочий процесс git между двумя машинами. Когда изменения в test1 готовы к производству, мы хотим использовать git, чтобы протолкнуть их с test1 на prod1. Цель здесь - иметь возможность быстро отменить изменения на prod1, если что-то сломается.

Вот что у меня есть:

  1. Настройте чистый репозиторий git (git init --bare) на test1: /opt/puppet.git в качестве промежуточного сервера.
  2. Отправьте данные из test1: / etc / puppet на чистую.
  3. На prod1 инициализируйте новое репо в / etc / puppet
  4. Добавьте test1: /opt/puppet.git bare как удаленный в prod1: / etc / puppet
  5. Перетащите основные данные из test1 в prod1 всякий раз, когда мы хотим применить изменения в производстве.

Что ты думаешь? Должны ли мы продолжать использовать одну главную ветвь или нам нужно создать новую ветку devel? Если мы создадим ветку devel, как мы будем использовать ее с недавно созданным голым репо?

Если я резюмирую ваш запрос, то, что вы хотите, - это иметь архитектуру с 1 сервером git, который получает все нажатия от пользователей и автоматические нажатия на prod, когда он будет готов.

Именно это и делается с архитектурой, основанной, например, на системе обзора gerrit. Рабочий процесс выглядит следующим образом:

  1. Git pull с прод-сервера
  2. Вы меняете локально
  3. Git push на тестовый сервер (всегда в выделенной ветке)
  4. Назначьте рецензента на коммит и добавьте дополнительные хуки для запуска, например, дымового теста на jenkins (хаки добавляются во время установки pahse).
  5. Когда рецензенты приняли код и тест дыма Дженкинса в порядке, если тривиальное слияние все еще возможно с мастером, отправка выполняется через gerrit автоматически.

Итак, хороший момент здесь в том, что никто (при правильной настройке) не может перейти к мастеру без минимального обзора и базового тестирования. Итак, вы мастер-ветка из prod (почти) всегда чистая.

Я действительно разобрался с этим сам. После некоторого тестирования я создал промежуточное голое репозиторий git (git init --bare) на test1. Это будет действовать как git-сервер, который будет получать и отправлять коммиты в репозитории test1 + prod1 по желанию.

Для этого я сделал следующее: На машине test1: 1. mkdir /opt/puppet.git 2. cd /opt/puppet.git 3. git init --bare 4. cd / etc / puppet (где находится текущий репозиторий git с реальным кодом) 5. useradd git && passwd git (чтобы разрешить push / pull с удаленных хостов) 6. git remote add origin git @ test1: /opt/puppet.git 7. git push origin - все теперь у меня весь мой код хранится в голом репо в / opt / puppet.git На prod1 1. cd / etc 2. git clone git @ test1: /opt/puppet.git 3. Если я хочу получить последние изменения: git pull