Frage
Gibt es einen legitimen Grund , SVN NICHT für Produktionsbereitstellungen zu verwenden, oder handelt es sich lediglich um einen Fall persönlicher Präferenz, und es gibt keinen wirklichen Fall gegen SVN?
Hintergrund
Mein Arbeitsplatz hat die Kultur, Releases in SVN zu markieren und diese Releases dann direkt auf den verschiedenen Webservern bereitzustellen svn co
oder svn switch
direkt in die Produktion einzubeziehen.
Ich persönlich habe ein Problem damit, da ich glaube, dass Sie ohne Verwendung eines Erstellungs- und Bereitstellungsskripts oder eines Formulars oder einer automatisierten Bereitstellung die Einstellungen der Integrationsumgebung verlieren, da diese nicht dokumentiert sind. Darüber hinaus habe ich jedoch das Gefühl, dass es eine versteckte Gefahr geben könnte, das zu tun, was übersehen wurde, etwas, das seinen hässlichen Kopf noch nicht aufgerichtet hat.
Ich habe meine Bedenken gegenüber den Betriebspersonal geäußert, die für die Bereitstellung von Code in unseren verschiedenen Umgebungen (Staging, Pre-Prod, Produktion) usw. verantwortlich sind. Ihre Argumente waren so ziemlich, dass es bisher ziemlich gut funktioniert hat, kein Grund zur Änderung.
Bearbeiten:
Was ich mit Erstellen und Bereitstellen meine:
Wenn ein Entwickler beispielsweise eine web.config-Einstellung benötigt, die für eine bestimmte Umgebung hinzugefügt wurde. Web.config wird im Allgemeinen nicht in svn gespeichert, daher werden diese Dateien manuell aktualisiert, ohne dass ein automatisiertes Build-Skript erforderlich ist. Wenn sie also verloren gehen oder OPS vergisst, der web.config ein Feld für eine Version hinzuzufügen, treten Probleme auf.
Ein Build-Skript, das XMLPoke verwendet, um automatisch eine für eine bestimmte Umgebung geeignete web.config zu generieren, ist ideal, da Sie über ein versionierbares Skript verfügen, das alle für jede Ihrer Umgebungen erforderlichen Änderungen dokumentiert.
Aktuelle Build- und Bereitstellungsmethode
Für das betreffende Projekt erstellt ein Entwickler eine Version manuell. Bei anderen Projekten wird der Erstellungsschritt entweder mit NANT oder mit MSBuild automatisiert, was in Ordnung ist.
Datenbankmigrationen für die meisten Projekte erfolgen über DB-Skripte oder Migrationsskripte (Migrator.NET) oder CMS-Pakete.
CI wird normalerweise von Team City pro Check-in durchgeführt. Wir haben einen Code-Überprüfungsprozess, bei dem alle Tickets in Filialen durchgeführt und dann vor dem Einchecken in den Trunk auf Validierung und Korrektheit / Qualität überprüft werden (funktioniert gut).
Die eigentliche Codebereitstellung erfolgt jedoch so gut wie immer über SVN, entweder über das Auschecken einer getaggten Version oder allgemeiner über einen SVN-Switch. Das ist etwas Seltsames an mir, dass wir unser Repository als Teil des Bereitstellungsprozesses verwenden.
Die Konfiguration ändert sich im Allgemeinen nicht sehr oft. Die einzigen Dinge, die in Konfigurationsdateien enthalten sind, sind umgebungsspezifische Informationen. Alles andere ist in der Datenbank.
Versteh mich nicht falsch, das funktioniert, es funktioniert gut. Ich möchte jedoch versuchen, auf eine automatisierte Erstellung und Bereitstellung zu drängen. Ich habe dies mit Rails und Capistrano und für persönliche Projekte mit Cygwin, Nant und SSH verwendet.
Noch wichtiger ist, dass ich sehr spezifische gültige Argumente benötige, um meine Kollegen dazu zu bringen, auf die Verwendung eines automatisierten Builds und Bereitstellens umzusteigen.
Oder gibt es KEINE wirklich gültigen Argumente gegen die Verwendung von SVN speziell für die Bereitstellung in der Produktion?
quelle
Antworten:
Nach meiner Erfahrung gibt es sowohl Vor- als auch Nachteile:
Vorteile:
Manchmal führen Sie dringende Hotfixes auf dem Produktionsserver durch, dann können Sie sie direkt von dort aus wieder einchecken. (Obwohl theoretisch aus Sicherheitsgründen immer eine gute Idee ist, den schreibgeschützten Zugriff auf das Repo vom Produktionsserver aus zu verwenden.)
Einfachheit: Sie liefern schnell, obwohl, wie andere hier erwähnt, der Wechsel zu einem Update-Skript-Schema genauso einfach sein kann.
Nachteile:
Ihr System kann während Ihrer
svn up
und DB-Updates instabil werden . Für eine stark frequentierte Site bedeutet dies, dass einige Benutzer bestenfalls auf Fehlermeldungen, fehlerhafte Seiten oder leere Seiten stoßen. Nun, das sehen wir sehr oft in verschiedenen sozialen Diensten. Ein guter Dienst tut dies jedoch "atomar" in dem Sinne, dass das System für die Dauer eines Updates in den Wartungsmodus versetzt wird. ( Du hast reddit gebrochen! )Konflikte: Das Lösen plötzlicher Konflikte auf dem Produktionsserver ist eine schreckliche Idee: Auch hier wird der Dienst instabil, während Sie ihn beheben.
Nicht verwandte Dateien auf dem Produktionsserver, die Ihnen gehören können oder nicht, obwohl Sie dies natürlich vermeiden können, indem Sie den richtigen Teilbaum im Repo auschecken.
Sicherheit: Jemand, der rechtmäßig oder nicht legitimerweise Zugriff auf Ihren Produktionsserver erhalten hat, erhält auch Zugriff auf Ihre Repos, möglicherweise auch auf andere Produkte und möglicherweise auch mit Schreibzugriff! Insgesamt ist es eine schlechte Idee, Ihren internen SVN-Server nach außen zu öffnen. Ihre Quell-Repositorys sollten sich hinter einer Unternehmens-Firewall befinden.
Es wird sowieso Update-Skripte geben, z. B. zum Aktualisieren der DB-Struktur, zum Verwalten von Cronjobs usw. Warum also nicht ein Skript, das alles kann? - dh die neueste vorgefertigte Version abrufen, in den Wartungsmodus wechseln, Quellen aktualisieren, release-spezifische Skripte ausführen usw.
Bearbeiten: Für diejenigen, die sich noch im SVN-Schema befinden, vergessen Sie dies nicht in Ihrer Apache-Konfiguration:
quelle
Ich habe bei meiner Arbeit einen CI-Server eingerichtet, der unser Installationsprogramm automatisch erstellt, sofern die Komponententests erfolgreich bestanden wurden. Es hat ungefähr einen Arbeitstag gedauert und mir viel mehr erspart, seit ich es eingerichtet habe.
Wenn bei der Konfiguration Ihrer Release- / Installations- / Produktionswebsite ein manueller Vorgang erforderlich ist, sparen Sie sich und das Unternehmen ausnahmslos Zeit. Dies ist für Sie angemessen, da aus Ihrer Frage hervorgeht, dass Ihr Einrichtungsprozess manuelle Konfigurationsschritte enthält.
Als Referenz sehen Sie, wie Joel selbst darüber spricht, wie Sie mit einem einzigen Klick-Erstellungsprozess kurz- bis mittelfristig gerettet werden.
quelle
Stellen Sie sicher, dass Sie über die entsprechenden Check-in-Steuerelemente für SVN verfügen. Betrachten Sie zum Beispiel Folgendes:
Wenn jemand nach dem Pre-Prod-Stadium versehentlich eincheckt, besteht die Gefahr, dass etwas kaputt geht. Wenn dies kontrolliert wird - da bis auf Fehlerbehebungen keine Eincheckvorgänge während des Pre-Prod zulässig sind - sehe ich keine Risiken.
Update: Wenn Sie Ihre Konfigurationsdateien nicht einchecken, tritt ein Problem auf. Ich kann dazu keinen anderen Rat geben als "Bitte und schnell!"
quelle
Es scheint in Ordnung zu sein, solange sich nichts außerhalb des Repositorys befindet. Tatsächlich glaube ich, dass man in den ersten Monaten des Projekts keine Zeit in Bereitstellungstools investieren sollte. Denn es wird zu viele Bereitstellungen geben, nicht genug Kunden, um sich über einen formellen Freigabeprozess Gedanken zu machen.
Sobald das Projekt etwa ein Jahr alt ist, lohnt es sich, in ein Bereitstellungstool zu investieren. Einfache Gründe sind
Wenn Sie sie überzeugen möchten, bitten Sie sie, einen anderen Server für interne Tests oder Qualitätssicherung einzurichten.
quelle