Ich habe gerade einen neuen Job im letzten Monat angefangen und es sieht so aus, als hätten sie KEINE Versionskontrolle für ihren Code. Sie verlassen sich auf die Backups, die ihr Hosting-Anbieter für sie erstellt.
Nachdem ich ein wenig geredet hatte, überzeugte ich meinen Chef, dass wir auf jeden Fall die Quellcodeverwaltung verwenden sollten, und nach einem kurzen Seminar war das gesamte Team an Bord. Sie liebten Mercurial.
Im Moment arbeiten wir also so:
º----------BitBucket
º---------/
º--------/
Ich selbst und die drei anderen Entwickler hg pull
von BitBucket nehmen unsere Änderungen vor und dann hg push
an BitBucket.
Für die Bereitstellung müsste jetzt jemand die neuesten Dateien per FTP auf den Produktionsserver übertragen.
Ich dachte daran, Mercurial auf unserem Server zu installieren und hg clone
(später hg pull
) die Versionen für die Produktion auf dem neuesten Stand zu halten.
º---push->-----BitBucket----<-pull-----º (production server)
º---push->----/
º---push->---/
Ist das eine gute Idee? Mögliche Fallstricke, die ich möglicherweise nicht sehe? Hat hier jemand etwas ähnliches gemacht? Wie implementieren Sie eine große PHP-Framework-Anwendung (wir verwenden Moodle)?
quelle
Antworten:
Dies ist sicherlich eine gute Idee und eine übliche Methode für die Bereitstellung. Möglicherweise möchten Sie einen stabilen Zweig für Bereitstellungszwecke verwenden und gleichzeitig den Trunk für die laufende Entwicklung beibehalten, damit Sie den stabilen Zweig testen können, bevor Sie ihn in der Produktion bereitstellen.
Das einzige Problem kann auftreten, wenn Ihre Codebasis vertrauliche Informationen enthält (z. B. API-Schlüssel usw.), die Sie nicht auf Server von Drittanbietern hochladen möchten (in Ihrem Fall wäre dies Bitbucket). In diesem Fall wird dieses Problem durch ein einfaches Skript behoben, das ausgeführt wird, sobald Sie die Daten aus dem Repository abgerufen haben, um die vertraulichen Daten an der richtigen Stelle wiederherzustellen.
quelle
Beachten Sie, dass diese Bereitstellungsstrategie nicht atomar ist. Es kann vorkommen, dass einige Dateien bereits aktualisiert werden, während sich andere Dateien möglicherweise noch im alten Zustand befinden, während die Anwendung ausgeführt wird. Dies kann zu unerwarteten Nebenwirkungen führen.
Eine Möglichkeit, Atomic Deployments durchzuführen, besteht darin, Symlinks zu verwenden. Erstellen Sie ein Verzeichnis mit den neuen Dateien. Wenn alles fertig ist, ändere einen Symlink für das verwendete Verzeichnis. Wenn Sie die alte Version beibehalten, können Sie auch problemlos ein Rollback durchführen.
quelle
Ein anderer (meiner meinung nach besser) Möglichkeit: Verwenden Sie einen Build Server / Continuous Integration Server.
Kurze kurze Erklärung: Dies ist ein Server (kann intern sein, muss nicht im Internet sein), den Sie für die Überwachung Ihrer Repositorys eingerichtet haben, und der Server erstellt Ihren Code, wenn neue Änderungssätze in den Repositorys vorhanden sind ( AFAIK das ist in PHP nicht nötig) , führt Komponententests durch und stellt Ihren Code auf dem Webserver bereit.
Weitere Informationen finden Sie unter folgenden Links:
Es gibt viele verschiedene Produkte für CI , aber das einzige, das ich bisher verwendet habe, ist TeamCity . Sehr einfach einzurichten ... in der Tat, es ist das erste, das ich ausprobiert habe, und es hat mir so gut gefallen, dass ich dabei geblieben bin.
Alternative billige Lösung:
Wenn das Einrichten eines Build-Servers zu aufwändig ist oder Sie mehr Kontrolle darüber haben möchten, wann genau Ihre Site bereitgestellt wird, richten Sie einfach eine Skriptdatei ein (Batch / Powershell unter Windows oder etwas Ähnliches unter Linux / Mac). , die die neueste Version aus Ihrem Repository und FTPs auf dem Produktionsserver.
Grundsätzlich ist es dasselbe wie ein Build-Server, nur einfacher.
Egal wie genau Sie es am Ende lösen ... stellen Sie sicher, dass Sie es irgendwie automatisieren!
Sie möchten in der Lage sein, die Bereitstellung mit einem einzigen Klick / durch Eingabe eines einzigen Befehls durchzuführen, damit JEDER dies tun kann, ohne etwas Besonderes zu wissen und ohne Fehler zu machen - auch im Katastrophenfall oder unter Stress.
quelle
Wir machen das oder ähnliche Dinge. Der von @johannes erwähnte nichtatomare Winkel ist ein Problem, obwohl er realistisch gesehen so schnell abläuft, dass er in Ordnung sein sollte, und es gibt Möglichkeiten, wie er darauf hinweist.
Wahrscheinlich wichtiger als diese Nicht-Atomizität ist "Wie verwalten Sie Datenbankschemaaktualisierungen?" - die Bereitstellung von fehlerhaftem Code auf diese Weise macht das Beheben so einfach. Das große Problem ist, wenn Sie ein Update bereitstellen, das die Datenbank ändert, für die Sie ein Rollback durchführen möchten. Oder wenn Sie fehlerhafte Aktualisierungen vornehmen und Daten beschädigen.
Das andere Problem mit DCVS-Tools (im Gegensatz zur Verwendung von SVN) ist, dass Sie jetzt eine Kopie der gesamten Codebasis auf dem Computer haben, die ein Angreifer möglicherweise abfangen könnte. Und auch, dass diese DCVS-Codebasis ziemlich umfangreich werden kann, was wichtig sein kann, wenn Sie für Speicher und / oder Backup bezahlen. Aus diesen Gründen wird SVN weiterhin für die endgültige Bereitstellung verwendet.
quelle
Es ist eine großartige Idee, beachten Sie jedoch Folgendes:
hg update -C
die Produktion nicht beeinträchtigt wird (dh löschen Sie wichtige Dateien)hg status
Ausgabe auf dem Server haben (dies hilft Ihnen sicherzustellen, dass Sie Dinge als Cache ignorieren)Schließlich denke ich, das Wertvollste für das Hinzufügen eines DVCS zu Ihrem Bereitstellungsprozess ist, dass dies die Sicherheit Ihrer Bereitstellung erhöht. Manchmal fügen Hacker schädlichen Code in Ihre Inhalte ein und Sie haben wirklich keine Möglichkeit, ihn ohne eine Art Versionskontrolle leicht zu erkennen. speziell verteilt, da der verteilte Aspekt zu VCS es einfacher macht, die Integrität Ihrer Dateien zu überprüfen).
Ich habe einige Websites gehackt ein paar Mal bekommen hat, mit Mercurial hilft ich litterally diese Hacks rückgängig machen , indem nur eine Ausgabe
hg update -C
in dem Server (natürlich Sie vielleicht ein tun , umhg status
die betroffenen Dateien für eine spätere Analyse und bekommen).quelle