Haga que Github presione a un server remoto cuando reciba actualizaciones

¿Cuál es la configuration para que Github envíe automáticamente las actualizaciones a un server remoto?

Esto es útil para mantener una base de código en Github y tener un website que se ejecute en esa base de código.

  1. Tengo mi repo en mi propia computadora, aquí es donde trabajo.

  2. Controlo mis cambios en mi repository local y los envío a mi repository de Github.

  3. Quiero que mi repository de Github envíe estos cambios a mi server remoto.

He estado investigando todo el día, y usar los 'ganchos' suena razonable. Tal vez usando un gancho 'post-receive' en Github que luego ejecuta un command push en mi server remoto.

¿Alguna sugerencia?

Como entiendo, github no te permite definir ganchos "verdaderos". Como después de recibir. En su lugar, proporcionan algo llamado webhook a los desarrolladores. lo que puede hacer con esto es emitir una request web a cualquier URL especificada por usted cada vez que haya una inserción en su repository.

Entonces, lo que puede hacer es: configurar un server web en su server remoto de git y configurar github para realizar una llamada http a él en la recepción posterior. Cada vez que github notifica a tu server remoto haz un pull desde github.

Consulte aquí sobre cómo usar webhooks: https://help.github.com/articles/post-receive-hooks

PD. Un mechianismo de gancho verdadero debería haber sido una vulnerabilidad de security posible para Github porque le permite ejecutar código personalizado en sus serveres. Entonces han creado algo que no te permite ejecutar nada pero que te permite hacer lo que quieras.

Para ilustrar la respuesta de Yervand (upvoted), considere este peligangit como un ejemplo de un server HTTP simple (que puede instalar en su instancia de amazon-ec2), que:

  • inicia un simple server HTTP.
  • escucha un POST de un webhook de GitHub
  • desplegará los nuevos commits

flujo de trabajo

Esa biblioteca searchía, y luego restablecería la twig principal en el origen / maestro.
Esa es una forma de hacerlo. (ver 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])