Сделайте GitHub push на удаленный сервер при получении обновлений
что настроено для того, чтобы Github автоматически нажимал любые обновления на удаленный сервер?
Это полезно для поддержания кодовой базы на Github и запуска веб-сайта с этой кодовой базы.
У меня есть РЕПО на моем собственном компьютере, здесь я работаю.
я фиксирую свои изменения в своем локальном РЕПО и нажимаю их на мое РЕПО Github.
Я хочу, чтобы мое РЕПО 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
- он будет тянуть вниз новые коммиты
библиотеки принесет, а затем сбросит основную ветвь на 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])