2014-02-23 6 views
30

Ich möchte in Gitlab einen Webhook erstellen, um automatisch ein Spiegelrepository auf Github zu aktualisieren, wenn ein push Ereignis eintritt. Ich habe diese page überprüft, aber ich habe nicht verstanden, wie es gemacht wird.Wie erstelle ich einen Gitlab Webhook um ein Mirror Repo auf Github zu aktualisieren?

Meine Gitlab Version ist 6.5. Hier ist die Konfigurationsseite:

inserir a descrição da imagem aqui

Was soll ich in URL setzen? Wo muss ich das Skript platzieren, um das Repository zu aktualisieren?

+0

möglich Duplikat [Gitlab Repository-Spiegelung] (http://stackoverflow.com/questions/14288288/gitlab-repository-mirroring) –

Antwort

40

Sie brauchen keinen Webhook dafür. Ein normaler Post-Receive-Hook funktioniert sehr gut.

Um einen solchen Hook zu erstellen und zu verwenden, müssen Sie sich nur auf dem Server anmelden, auf dem Ihr Gitlab installiert ist, und einen SSH-Schlüssel für Git-Benutzer erstellen.

sudo -u git ssh-keygen -f /home/git/.ssh/reponame_key 

(kein Passwort eingeben, wenn Sie dazu aufgefordert)

zu Ihrem GitHub Konto gehen und fügen Sie den öffentlichen Schlüssel (als /home/git/ssh/reponame_key.pub erstellt wird worden), um Ihr Projekt als deploy Schlüssel. werfen Sie einen Blick auf https://help.github.com/articles/managing-deploy-keys, wenn Sie Hilfe dabei brauchen.

Sobald dies geschehen ist, müssen Sie nur die Verbindung zwischen Ihrem git-Server konfigurieren müssen und Github ist: einen Alias ​​ssh-Konfiguration hinzufügen git Benutzers (fügen folgende Zeilen zu /home/git/.ssh/config - schaffen Sie es, wenn es nicht vorhanden ist)

Host reponame 
IdentityFile /home/git/.ssh/reponame_key 
HostName github.com 
User git 

nun die neue Remote in der Repository (die Alias ​​Sie gerade erstellt):

cd /home/git/repositories/namespace/reponame.git 

git remote add --mirror github reponame:youruser/reponame.git 

Jetzt, wo alles an seinem Platz ist, Sie den eigentlichen Haken erstellen müssen werden:

cd /home/git/repositories/namespace/reponame.git/hooks 

echo "exec git push --quiet github &" >> post-receive 

chmod 755 post-receive 

Der lastcommand ist sehr wichtig, da git überprüft, ob ein hook ausführbar ist, bevor er ausgeführt wird.

Das war's!

(Ersetzen Sie Reponame, Namespace und youruser nach Ihren realen Konten und genießen Sie).

Hinweis: Wenn Sie möchten, dass Ihr Name andavatar in der Nähe von github festgeschrieben wird, stellen Sie sicher, dass die auf gitlab verwendete E-Mail-Adresse eine der Adressen ist, die auch in Ihrem github-Konto enthalten sind. Ansonsten sehen Sie Ihren gitlab-Benutzernamen.

+0

Eine andere Sache, die Gitlab 6.5-Verzeichnisse haben '.git' am Ende des Namens (zB' dotfiles.git') und sie sind keine 'Git'-Repositories. Daher konnte ich den Befehl, der den GitHub-Spiegel hinzufügt, nicht ausführen. – Yamaneko

+1

@VictorHugo Sie haben auch Recht mit der Endung .git der Verzeichnisse. Sie sind jedoch falsch, wenn Sie sagen, dass sie keine git Repositories sind, sie sind [bare Repositories] (http://www.saintsjd.com/2011/01/what-isa-a-bare-git-repository/) und ein Hook-Verzeichnis enthalten, das speziell für Anwendungen wie die, die ich gerade illustriere, entworfen wurde. – novalore

+1

Es hat funktioniert. Vielen Dank @novalore. Ich möchte einige Debug-Schritte teilen, um zu sehen, ob alles gut eingerichtet wurde. Nach dem Einschließen des neuen Hostnamens in '/ home/git/.ssh/config' kann man sehen, ob es funktioniert hat, indem man' sudo -u git ssh reponame' ausgeführt hat. Es wird angezeigt: 'Hi youruser/reponame! Sie haben sich erfolgreich authentifiziert, GitHub bietet jedoch keinen Shell-Zugriff. Verbindung zu github.com closed.' – Yamaneko

1

Für WebHooks Verarbeitung verwende ich Sinatra Web Server.

require 'sinatra' 
post '/pew' do 
    puts JSON.parse request.body.read 
    # here can be placed signal code to run commit processing script 
end 

Register Webhook für Push-Ereignisse (oder andere) zu http://localhost:4567/pew innerhalb Gitlab und seit diesem Moment an jedem Commit Gitlab Info url verpflichten senden werden.

24

Wenn Sie kein eigenes GitLab hosten, hat GitLab.com diese Funktion direkt und ohne Umgehungslösungen eingeführt.

  1. Von innerhalb eines Projekts auf das Zahnradsymbol verwenden Spiegel Repository
  2. Blättern Sie zum Drücken zu einem Remote-Repository
  3. Häkchen Fern Spiegel-Repository wählen: Automatisch aktualisieren Sie die Remote-Spiegel Filialen, Tags und Commits von diesem Repository jede Stunde.
  4. Geben Sie das Repository ein, das Sie aktualisieren möchten; für GitHub können Sie Ihren Benutzernamen und Passwort in der URL, wie so sind: https://yourgithubusername:yourgithubpassword[email protected]/agaric/guts_discuss_resource.git
+0

Derzeit scheint dieser neue Ansatz am einfachsten zu sein, wenn Sie GitLab.com verwenden. Die Antwort von @novalore ist jedoch allgemeiner und deckt alle Setups von GitLab ab. Also behalte ich es als die Antwort auf die Frage, aber diese kann auch gültig sein. – Yamaneko

+0

In GitLab.com ist diese Option jetzt nur für Bronze-Benutzer verfügbar –

Verwandte Themen