2009-08-13 5 views
10

Ich verwende PHPUnderControl, die oben auf Cruise Control für meine kontinuierliche Integration und Unit-Tests läuft. Ich habe es auch eingerichtet, PHPDocumentor zu laufen, um phpdocs für mich zu erzeugen, und es läuft PHP Code Sniffer, um Kodierungsstandards für mich durchzusetzen. Aber jetzt möchte ich etwas auf dem gleichen Server (Ubuntu) einrichten, um die Bereitstellung auf einem Remote-Server zu erleichtern. Ich habe es bereits eingerichtet, so dass nach jedem erfolgreichen Build ein SVN-Export von trunk in ein Verzeichnis im Projektordner auf dem Server erfolgt.PHP Build-System

Ich habe daran gedacht, ein kleines benutzerdefiniertes PHP-Skript zu schreiben, das SSH an einen konfigurierten Remote-Server sendet, den neuesten Export hochlädt, es kopiert, entpackt und alle Migrationen ausführt. Ein PHP-Skript wie dieses sollte anfangs nicht zu schwierig sein, es sei denn, ich muss irgendwann mit der Skalierung auf mehrere Server beginnen. Ich weiß, dass es Systeme wie Phing, Fabric und andere gibt.

Meine Frage ist, ob jemand irgendwelche Erfahrungen mit diesen hat und kann einige Pro und Con's bieten? Ich habe begonnen, Phing auf meinem Server einzurichten und werde Fabric als nächstes mit ihnen spielen, aber ich fragte mich, ob jemand, der sie umfangreicher verwendet oder skalieren musste, Feedback geben könnte.

Antwort

8

Ich habe Capistrano mit PHP verwendet (obwohl es eher eine Rails-y Sache ist, wie es in Ruby geschrieben wird).

Es war wirklich einfach zu bedienen, aber das sagte, ich musste nicht viel damit skalieren. Wir stellen jedoch auf verschiedenen Staging-/Produktionsservern bereit, und die mehrstufige Erweiterung war in diesen Szenarien nützlich.

Wie die meisten Dinge Ruby, gibt es eine Menge Haken und "Magie", die verwirrend werden kann, wenn Sie neu in Capistrano sind und versuchen, etwas schwierig zu machen.

Wie für den Vergleich mit anderen Bereitstellungstools kann ich nicht kommentieren. Ich weiß, dass wir früher Phing benutzt haben, aber ich bin mir nicht sicher, warum wir nach Capistrano gewechselt sind.

+0

Ich mag Capistrano. +1 –

0

Wenn ich ein solches Deployment-System implementieren würde, würde ich wahrscheinlich eine etwas andere Lösung wählen, als Sie oben beschrieben haben. Anstatt Code zu haben, der lokal auf meinem System läuft, sich mit einer Liste von entfernten Servern verbindet und dort "arbeitet", würde ich das Updater-Modul mit dem Rest des Codes packen und es die Aktualisierungsdaten von meinem Server bei Bedarf abrufen lassen (oder besser, wenn ich es "gesagt" habe). Auf diese Weise müssen Sie sich viel weniger Sorgen machen (Sie müssen den aktualisierten Code nur über HTTP bereitstellen, wenn Sie dazu aufgefordert werden, und der Remote-Server erledigt den Rest). Nur meine 2 Cent.

1

Wir verwenden Phing und es hat sich als praktisch erwiesen. Wir verwenden es nicht für die Verpackung, aber es sollte nicht zu schwer sein, es zu tun, was Sie suchen. Wir verwenden es hauptsächlich für allgemeine Aufgaben wie das Löschen von Caches, das Erstellen von Entwicklungsstandorten und andere Aufgaben, die in der Entwicklung helfen sollen. Es war eine große Hilfe, und von dem, was ich sammeln kann, scheint es ein Ameisenklon zu sein, obwohl es nicht die ganze Funktionalität hat, die ant hat.

0

Ich habe mein eigenes rsync wie Werkzeug dafür geschrieben, weil ich von einer sehr schlechten Internetverbindung in einem 3. Weltcontry arbeite und alle Arten von Ausfällen und verhungernden Verbindungen habe, so dass rsync nicht funktioniert.

Auf Ihrem Remote-System sollten Sie mindestens ein kleines Skript schreiben, das vor dem Ausführen von Migrationen Backups erstellt.

Besser ist es, wenn Sie ein vollständiges unabhängiges Spiegelsystem auf Ihrem Web-Host-System verwenden und nach einer Migration einige kleine aber grundlegende Komponententests einbinden. Führen Sie dann einen Root-Wechsel durch, um die aktualisierte Website online zu stellen. Dies würde erfordern, dass während der Migration einige interaktive Dienste im schreibgeschützten Modus ausgeführt werden (leider ein Feature, das nicht viele Leute implementieren).

Vor allem aber - denken, wenn es Ihre Zeit tut dies wirklich wert ist - wenn man nur jeweils ein Viertel aktualisiert dann eine einfache Checkliste auf dem Papier würde ausreicht.

2

Wenn Sie Capistrano, aber wollte es ein bisschen mehr PHP'ish war Besuche Fredistrano.

Ich schrieb einen automatisierten Build (SVN Export, Zend Guard Codierung, etc.) und Phing einmal mit Entfaltungssystem und fand den ziemlich Schmerz zu verwenden. Immer wenn ich eine spezielle Aufgabe schreiben musste, fühlte ich, dass ich durch viele Wege springen musste, nur um sie zur Arbeit zu bringen.

in diesen Tagen schreiben ich also nur einfachen Bash-Skripte, die mit SVN checkout nicht bauen, Kodierung, einen Tag in SVN und Bereitstellung durch rsync zu schaffen. Es mag Low-Tech sein, und Phing mag einige überlegene Eigenschaften haben, aber zumindest kommt es mir nicht in die Quere.

2

Theres ein neues Build-Tool namens Bldr. Es verwendet Yaml für config anstelle von xml wie die meisten anderen Build-Systeme und es ist sehr erweiterbar.

http://bldr.io