Ist es akzeptabel, eine Webanwendung direkt von SVN für die Produktion bereitzustellen?

11

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 cooder svn switchdirekt 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?

Justin Shield
quelle
Können Sie näher darauf eingehen, "ohne Verwendung eines Build- und Bereitstellungsskripts oder eines Formulars oder einer automatisierten Bereitstellung verlieren Sie die Einstellungen der Integrationsumgebung"?
Talonx
@talonx - Wenn ein Entwickler beispielsweise eine web.config-Einstellung für eine bestimmte Umgebung benötigt. 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 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.
Justin Shield
Vielen Dank. Vielleicht können Sie Ihre Frage bearbeiten, um diesen Punkt zu klären.
Talonx
Müssen sie nur die Quellen auschecken oder gibt es nach dem Auschecken manuelle Schritte (Kompilieren, Verpacken, Konfigurieren, ...)?
David

Antworten:

7

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 upund 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:

<DirectoryMatch .svn>
    Order deny,allow
    Deny from all
</DirectoryMatch>
Mojuba
quelle
1
+1: Hervorragende Argumente. Möglicherweise kann ich es unter Sicherheitsaspekten und dem Risiko eines kompromittierten Repositorys verkaufen. Ein guter Grund, eine Diskussion gegen die Verwendung von SVN für Produktionsbereitstellungen zu fördern.
Justin Shield
2

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.

Bringer128
quelle
0

Stellen Sie sicher, dass Sie über die entsprechenden Check-in-Steuerelemente für SVN verfügen. Betrachten Sie zum Beispiel Folgendes:

  • Funktionen werden für eine Version eingecheckt
  • Code wird für die Bereitstellung bereitgestellt, die Qualitätssicherung erledigt ihre Aufgabe
  • Fehler wurden behoben, eine weitere Testrunde (funktioniert jedoch in Ihrem Team)
  • Das Gleiche gilt für Pre-Prod
  • In der Produktion bereitstellen

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!"

Talonx
quelle
Konfigurationsdateien werden als web.config-default eingecheckt. Das größte Problem dabei ist, dass es so leicht ist, das Aktualisieren der versionierten Datei in SVN zu vergessen, wenn Sie Funktionen hinzufügen, da diese für eine Bereitstellung nicht direkt erforderlich sind. Diese Dateien sind fast immer veraltet und erst wenn Sie feststellen, dass Sie die Datei benötigen, müssen Sie herausfinden, was sich zwischen der versionierten und der nicht versionierten Datei unterscheidet. Außerdem möchten Sie aus demselben Grund keine Version pro Umgebung in SVN aktualisieren.
Justin Shield
Wie wäre es, wenn Vorgänge vor der Bereitstellung immer die Konfigurationsdatei von svn übernehmen?
Talonx
0

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

  • Das Geschäft wächst, sodass Sie planen, es auf mehr als einem Server zu hosten
  • In einer bestimmten Umgebung sind möglicherweise Fehler aufgetreten, und Sie haben keinen Platz, um den Fehler zu replizieren. Es gibt keine einfache Möglichkeit, es ohne einen tar-untar-forget_about_home_for_a_week-Prozess einzurichten.
  • Jemand wird wahrscheinlich den Build brechen. Wer hat den Build gebrochen

Wenn Sie sie überzeugen möchten, bitten Sie sie, einen anderen Server für interne Tests oder Qualitätssicherung einzurichten.

Arunmur
quelle