Nur den Artikel anzeigen

Wer seine Web­site lokal ent­wi­ckelt und den Quell­code auf Github ver­wal­tet, ist mit fol­gen­dem Ablauf bes­tens vertraut:

  • Lokale Änderungen am Quell­code werden über git push in das Github-Repository ein­ge­pflegt und
  • der Quell­code auf dem De­ploy­ment-Server über eine SSH-Verbindung mit einem git pull aktualisiert.

Dieser Pro­zess lässt sich mit Deployment-Helfern wie Vlad oder Ca­pis­trano natürlich au­to­ma­ti­sie­ren. Diese Helfer müssen al­ler­dings vorher auf­wen­dig kon­fi­gu­riert werden und kommen daher nicht für jedes Pro­jekt in Frage.

Wer seinen Quell­code auf dem Server nur schnell ak­tua­li­sie­ren lassen möchte, kann auf Push­mas­ter zurückgreifen. Die Si­na­tra-Anwendung läuft auf dem ei­ge­nen Deployment-Server (z.B. über Apache/Passenger) und wartet auf ein Signal ( Post-Receive Hook) von Github, um anschließend den git pull-Befehl selbständig auszuführen.

Installation

Sinatra installieren

Push­mas­ter ist eine Sinatra-Anwendung und benötigt daher die Sinatra-Bibliotheken.

Diese in­stal­liert man über den Ruby-Paket Ma­na­ger gems
Die ak­tu­elle Ruby Gems Ver­sion kann man von der Ru­byF­orge Seite be­zie­hen. Eine In­stal­la­ti­ons­alei­tung findet man im User Guide.

sudo gem install sinatra

Pushmaster auf dem eigenen Server einrichten.

Den Quell­code von Push­mas­ter be­zieht man von der Github-Projektseite oder direkt durch:

git clone git://github.com/augustl/pushmaster.git

Anschließend rich­tet man für den Zu­griff auf Push­mas­ter eine Sub­do­main ein:

pushmaster.meinedomain.de

und leitet diese auf das Un­ter­ver­zeich­nis “public” der Pushmaster-Installation
 :

public_html/pushmaster.meinedomain.de/public

Damit der eigene Web­ser­ver Push­mas­ter ausführen kann, benötigt man einen Rack-kompatiblen Web­ser­ver. Wer Apache 2 ein­setzt, kann hier auf Pass­an­ger (mod_rails) zurückgreifen. Eine An­lei­tung um Pass­an­ger mit dem Apache 2-Server zu ver­bin­den, findet man in der Passenger-Installationsanleitung.

Damit der Zu­griff auf Push­mas­ter Un­be­fug­ten vor­ent­hal­ten bleibt, er­stellt man im Pushmaster-Hauptverzeichnis eine Datei Namens settings.yml und trägt dort einen Be­nut­zer­na­men und das zugehörige Pass­wort folgendermaßen ein:

username: pushmaster
password: secret

Als nächstes teilt man Push­mas­ter mit, wel­ches Github-Repository ak­tua­li­siert werden soll. Dazu er­stellt man im Un­ter­ver­zeich­nis Lis­teners eine Datei mit dem Namen des Re­po­si­to­ries und der ruby-typischen Datei­en­dung .rb:

pushmaster.meinedomain.de/listeners/[name_des_repositories].rb

Eine ty­pi­sche Listener-Datei in Push­mas­ter sieht folgendermaßen aus: In der Listener-Datei kann nor­ma­ler Ruby-Code ver­wen­det werden.

Dir.chdir "/public_html/meinedomain.de/public" do
git "pull"
touch "tmp/restart.txt"
end

Funktionsweise von Pushmaster

  • Zunächst wird in das Ver­zeich­nis des Website-Projektes gewechselt.
  • Anschließend ak­tua­li­siert Push­mas­ter durch ein git pull den Quell­code des Projektes.
  • Zum Schluss wird Apache2/Passenger mit­ge­teilt, dass beim nächsten Aufruf die Sinatra-Anwendung neu­ge­star­tet werden soll. Dieser Schritt ist optional.

Wer wei­tere Ope­ra­tio­nen durchführen lassen möchte, kann auf die Ruby-Syntax ( und fol­gende, durch die Pushmaster-DSL zur Verfügung ge­stell­ten Funk­tio­nen zurückgreifen:

  • git — führt einen git-Befehl aus
  • touch — er­stellt eine Datei
  • run — führt ein System-Kommando aus
  • log — Er­stellt ein Log­file unter log/name_des_repositories.log

Github konfigurieren

Push­mas­ter rea­giert auf den Post-Receive Ser­vice Hook von Github. Diesen rich­tet man folgendermaßen ein:

Pro­jek­te­seite auf Github → Admin → Ser­vice Hooks → Post-Receive-URLs → URL:

http://username:password@pushmaster.meinedomain.de

Nun spei­chert man die Änderungen mit Update Settings

Nach einem er­folg­rei­chen git push auf dem lo­ka­len Entwicklungs-Server kon­tak­tiert Github über die Post-Receive-URL Push­mas­ter und dieser führt auf dem De­ploy­ment­ser­ver ein git pull aus.

Damit ist die In­stal­la­tion von Push­mas­ter abgeschlossen.

Stolpersteine

Schreibrechte

Damit Push­mas­ter das Re­po­sitory auf dem Deployment-Server ak­tua­li­sie­ren kann, benötigt der Apache 2-Benutzer die not­wen­di­gen Schreib­rechte. Sind der Be­nut­zer des Website-Projektes und der Apache 2-Benutzer in der selben Gruppe, ist ein chmod 755 auf das Re­po­sitory ausreichend.

Versionsprobleme mit Passenger

Push­mas­ter benötigt min­des­tens die Ver­sion 2.2.2 von Pas­sen­ger. Pas­sen­ger liegt ak­tu­ell (26.06.09) in der Ver­sion 2.2.4 vor.Beim Versions-Update sollte man un­be­dingt darauf achten, dass Apache 2 nicht auf die alte gem-Version zugreift.

Wich­tig sind hier fol­gende Zeilen, die während der Passenger-Installation und nach einem Update in die Apache 2-Konfiguration eingefügt werden müssen:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2
PassengerRuby /usr/bin/ruby1.8

Kein Kommentieren möglich