2 Cloud-Server, ein Entwickler, ein Entwickler; Was ist ein guter Bereitstellungsprozess?

8

Derzeit verwende ich den LAMP-Stack für meine Web-App. Mein Dev und Prod befinden sich in derselben Cloud-Instanz. Jetzt erhalte ich eine neue Instanz und möchte die Entwickler- / Testumgebung auf die neue Instanz verschieben, um sie von der Produktumgebung zu trennen.

Es war einmal ein einfaches Phing-Skript, das einen SVN-Export in das prod-Verzeichnis (auf das meine vhost.conf zeigt) durchführen würde. Wie mache ich jetzt einen guten Build-Prozess mit getrennten Umgebungen?

Denken Sie daran, das SVN-Repository auf den Dev-Server zu übertragen und dann einen ssh + svn-Push auszuführen (ist das mit Phing möglich?)

Was ist die beste / gängige Praxis für diese Art von Setup?

Weitere Informationen:

Ich verwende derzeit CodeIgniter für das MVC-Framework, Phing für automatisierte Builds für die Bereitstellung von localhost. Die Web-App wird auch von einigen CRON-Skripten unterstützt, die in Java geschrieben wurden.

Aktualisierung:

Beendet mit Phing + Jenkins. Bis jetzt gut arbeiten!

    
lamp_scaler 12.07.2011, 15:52
quelle

3 Antworten

3

Wir verwenden Phing für ähnliche Bereitstellungen wie von Ihnen beschrieben. Wir verwenden auch Symfony Framework für unsere Projekte (was nicht so wichtig ist, aber Symfony unterstützt das Konzept verschiedener Umgebungen, also ist es ein Plus).

Allerdings müssen wir noch verschiedene Konfigurationsdateien für Datenbank, Frontcontroller usw. erstellen.

Wir hatten also einen Ordner mit build.properties, der die Konfiguration für verschiedene Umgebungen definiert (und in unserem Fall auch für verschiedene Kunden, an die wir unser Produkt liefern). Dieser Ordner ist über svn externals mit der Dateistruktur verknüpft (wiederum nicht notwendig).

Die phing build.xml-Datei akzeptiert dann eine Eigenschaftendatei als Parameter in der Befehlszeile, übernimmt die Werte daraus und erzeugt alle notwendigen Konfigurationsdateien, Controller und andere umgebungsspezifische Dateien. Wir speichern die Konfiguration in Vorlagendateien und verwenden dann die Kopier- / Filterfunktion in Phing, um die Platzhalter in den Vorlagen durch die spezifischen Werte zu ersetzen.

Die gesamte Aufgabe, die gegebene Umgebung zu konfigurieren, kann dann so einfach sein wie etwa:

%Vor%

In Ihrer Build-Datei prüfen Sie, ob die Eigenschaft propertyFile , die die Eigenschaftendatei spezifiziert, definiert ist und laden Sie die Datei mit <property file="./build_properties/build.properties.prod" override="true" /> . Dann machst du einfach Magie mit den Werten, die du brauchst.

Sie können immer noch Ihre Svn Checkout / Update verwenden und alle resultierenden Konfigurationsdateien in Svn Ignore (Sie haben sie durch Phing erzeugt). Wir verwenden tatsächlich zusätzliche Schritte in Phing. Diese Schritte ergeben am Ende ein Linux Shell-Installationspaket für die Selbstinstallation. Dies wird automatisch in Jenkins erzeugt. Wir senden das Paket dann an unsere Kunden, oder das Support-Team kann das Paket von Jenkins holen und sie können die gesamte Bereitstellung durchführen (wir bevorzugen immer noch manuelle Implementierungen zu Produktionsservern) oder Jenkins kann es automatisch bereitstellen (zum Beispiel zum Testen) Server).

Ich werde gerne weitere Informationen schreiben, falls nötig.

    
poisson 12.07.2011, 22:21
quelle
1

Ich empfehle die Verwendung von Capistrano (sieht so aus, als hätten sie die Dokumente seit dem Verschieben der Site nicht aktualisiert) und railsless-deploy für die Bereitstellung. Schließlich müssen Sie wahrscheinlich weitere Anwendungsfelder hinzufügen und andere Aufgaben als Teil Ihrer Bereitstellung ausführen. Wenn Sie also ein Framework auswählen, das dies unterstützt, können Sie in der Zukunft viel Zeit sparen. Ich habe Capistrano für zwei PHP-Implementierungen verwendet (eine kleine und eine große) und obwohl es nicht perfekt ist, funktioniert es gut. Es behandelt auch das Auschecken / Aktualisieren des Codes, das Verschieben von symbolischen Links und das Zurücksetzen, wenn etwas schief geht.

Sobald Sie capistrano konfiguriert haben, müssen Sie nur noch Folgendes tun:

%Vor%

Eine andere Option, die ich für dieses Vorgehen erkundet habe, ist Fabric . Obwohl ich es nicht benutzt habe, wenn ich eine komplexe App erneut bereitstellen müsste, würde ich es berücksichtigen. Die Schnittstelle ist einfach und unkompliziert.

Eine dritte Möglichkeit, die Sie vielleicht betrachten, ist, dass es immer noch in den frühen Entwicklungsstadien Gantry ist (verzeihen Sie die Selbstwerbung ). Dies ist etwas, an dem ich gearbeitet habe, weil ich frustriert war, mit capistrano eine PHP-Anwendung in einer Umgebung mit vielen beweglichen Teilen zu implementieren. Capistrano ist großartig und funktioniert gut für Nicht-PHP-Anwendungsbereitstellungen, aber Sie müssen immer noch etwas im Code herumstochern, um zu verstehen, was passiert, und es an Ihre Bedürfnisse anpassen. Aus diesem Grund empfehle ich, dem Stoff einen guten Look zu geben.

    
drsnyder 12.07.2011 22:38
quelle
0

Ich benutze jetzt eine ähnliche Konfiguration. Lampe + SVN + codeigniter + prd und dev-Server.

Ich starte die Svn Repos auf Dev. Ich checke die Repos in den Root-Ordner der Dev-Domain. Verwenden Sie anschließend einen Post-Commit Hook, um den Stammordner jedes Mal zu aktualisieren, wenn ein Entwickler festlegt.

Wenn wir glücklich sind und den Code vollständig getestet haben, ssh in den prd-Server und rsync den dev-root zum prd-root.

Heres meine Lösung für die verschiedenen Konfigurationen. Außerhalb des Stammordners habe ich eine config.ini-Datei. Ich parse die Datei in meinem Skript codeigniter constants.php. Das bedeutet, dass der prd- und der dev-Server separate Einstellungen haben können, ohne dass sie sich jemals in den Repos befinden.

Wenn Sie Hilfe mit Post-Commit, Rsync und Ini-Code möchten, lassen Sie es mich wissen.

    
Boz 28.07.2011 20:18
quelle