Сделайте GitHub push на удаленный сервер при получении обновлений

что настроено для того, чтобы Github автоматически нажимал любые обновления на удаленный сервер?

Это полезно для поддержания кодовой базы на Github и запуска веб-сайта с этой кодовой базы.

  1. У меня есть РЕПО на моем собственном компьютере, здесь я работаю.

  2. я фиксирую свои изменения в своем локальном РЕПО и нажимаю их на мое РЕПО Github.

  3. Я хочу, чтобы мое РЕПО Github затем подтолкнуло эти изменения к моему удаленный сервер.

Я исследовал весь день, и использование "крючков" звучит разумно. Возможно, используя крюк "post-receive" на Github, который затем запускает команду push на мой удаленный сервер.

какие предложения?

2 ответов


Как я понимаю, github не позволяет вам определять" истинные " крючки. Как после получения. Вместо этого они предоставляют что-то под названием веб-перехватчик для разработчиков. что вы можете сделать с этим, это выдать веб-запрос на любой URL, указанный вами, когда есть толчок к вашему репозиторию.

Итак, что вы можете сделать: настройте веб-сервер на удаленном сервере git и настройте github, чтобы сделать http-вызов на него после получения. Всякий раз, когда github уведомляет ваш удаленный сервер, сделайте pull on это из github.

см. здесь о том, как использовать webhooks:https://help.github.com/articles/post-receive-hooks

С. П. Истинный крючок mechianism, который мог бы быть возможной уязвимостью безопасности для GitHub, потому что он позволяет выполнять пользовательский код на своих серверах. Поэтому они сделали что-то, что не позволяет вам выполнить что-либо, но все же позволяет вам делать все, что вы хотите.


иллюстрации Казар ' s ответ (upvoted), рассмотрим это peligangit в качестве примера простого HTTP-сервера (который вы можете установить на свой экземпляр amazon-ec2), который будет:

  • запустите простой HTTP-сервер.
  • слушайте сообщение от GitHub webhook
  • он будет тянуть вниз новые коммиты

workflow

библиотеки принесет, а затем сбросит основную ветвь на origin / master.
Это один из способов сделать это. (см. githook.py)

def hard_reset_repos(self):
    self.server.source_repo.fetch([self.server.source_repo.origin])
    self.server.source_repo.reset(['--hard', self.server.source_repo.originMaster])