2013-03-04 7 views
11

Co to jest konfiguracja, aby Github automatycznie przekazywał aktualizacje do zdalnego serwera?Spraw, aby Github był przekazywany do zdalnego serwera po otrzymaniu aktualizacji.

Przydaje się to do utrzymywania kodu na Github, a strona internetowa spływa z tego kodu.

  1. Mam moje repo na moim komputerze, tu pracuję.

  2. Zatwierdzam moje zmiany w lokalnym repozytorium i przesyłam je na moje repozytorium Github.

  3. Chcę, aby moje repozytorium Github następnie wypchnęło te zmiany na mój serwer zdalny.

Badam cały dzień, a używanie "haczyków" brzmi rozsądnie. Być może za pomocą haka "po otrzymaniu" na Githubie, który następnie uruchamia polecenie push na mój serwer zdalny.

Wszelkie sugestie?

Odpowiedz

10

Jak rozumiem, github nie pozwala zdefiniować "prawdziwych" haków. Podobnie jak post-receive. Zamiast tego dostarczają programistom coś, co nazywa się webhook. możesz to zrobić, wysyłając żądanie internetowe do dowolnego adresu URL podanego przez ciebie, gdy nastąpi push do twojego repozytorium.

Więc, co możesz zrobić, to: skonfigurować serwer WWW na swoim zdalnym serwerze git i skonfigurować github, aby uzyskać połączenie http do niego na post-receive. Ilekroć github powiadamia twój zdalny serwer, ściągnij go z github.

Zobacz tutaj, jak używać webhooks: https://help.github.com/articles/post-receive-hooks

PS: Prawdziwy haczyk mechaniczny mógł być możliwą luką w zabezpieczeniach githuba, ponieważ pozwala na wykonanie niestandardowego kodu na swoich serwerach. Zrobili więc coś, co nie pozwala ci wykonywać niczego, ale nadal pozwala ci robić wszystko, co chcesz.

7

Aby zilustrować Yervand „s answer (upvoted), należy rozważyć ten peligangit jako przykład prostego serwera HTTP (który można zainstalować na swoim amazon-EC2 instancji), które będą:

  • początek prosty serwer HTTP.
  • słuchać na stanowisko ze GitHub webhook
  • będzie ciągnąć w dół nowe rewizje

workflow

tej biblioteki będzie pobierał, a następnie zresetować główny oddział na pochodzenia/master.
To jeden sposób, aby to zrobić. (patrz 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])