Wie übertrage ich Dateien in die Produktion?

9

Wir sind eine Gruppe, die begonnen hat, an einer ziemlich großen Website mit einer vorhandenen Codebasis zu arbeiten. Wir haben einen Test und einen Produktionsserver.

Unsere Idee ist es, ein Test-Repository mit einer Reihe von Entwicklern zu haben, auf die Push-Zugriff besteht. und ein gesegnetes Repository, zu dem nur wenige drängen können. Das gesegnete Repo soll immer stabil sein und die neueste Serienversion darstellen.

Wie kann ich den Prozess der Übertragung der Dateien in die Produktion automatisieren? Ist es schlecht, die Produktionsdateien unter Versionskontrolle zu haben? Auf diese Weise würde das Verschieben in das gesegnete Repository die Bereitstellung bedeuten. Aber was passiert, wenn es Zusammenführungskonflikte gibt? Wird der Produktionsserver kaputt gehen, bis er behoben ist?

Tamás Szelei
quelle

Antworten:

7

Einfach ausgedrückt:
Der Push-Prozess an sich sollte vollautomatisch sein. Egal, ob Sie ein benutzerdefiniertes Skript haben oder einfach vom "gesegneten" Repo in die Produktionsumgebung wechseln. Es ist von dir abhängig. Sie sollten nur etwas automatisiert haben, da automatisierte Prozesse zuverlässig gemacht werden können (im Gegensatz zum Hochladen von Dateien von Hand und dergleichen).

Der Push-Vorgang sollte jedoch manuell ausgelöst werden. Sie pushen Ihre Updates und wenn Sie sich sicher sind, markieren Sie sie als Release Candidate und ziehen sie in Ihre Testumgebung (die Ihrer Produktionsumgebung im Idealfall so ähnlich wie möglich ist). Sobald der RC getestet wurde, kann der Push gestartet werden.
Bis heute kann Ihnen nichts anderes geben, was menschliche Tester können.

Dies klingt etwas langsam in dem Sinne, dass die Rückkopplungsschleife relativ groß ist. Für ordnungsgemäße Tests ist es jedoch wichtig, einen festen Schnappschuss zu erstellen, der dann für 24 bis 48 Stunden (oder je nach Größe des Projekts länger) untersucht wird. Das Gegenteil ist ein Szenario, in dem Sie direkt nach dem Push viele Fehler finden und versuchen, diese mit einigen schnellen Korrekturen zu beheben, die neue Fehler verursachen.
Sie sollten eine Veröffentlichung mit bekannten Fehlern (akzeptabler Schwere) durchführen, als eine mit unbekannten Fehlern (unbekannter Schwere).

back2dos
quelle
Ein Repo auf dem Produktionsserver ist also in Ordnung? Als ich Automatisierung sagte, meinte ich, falls es kein Repo auf dem Produktionsserver gäbe (mit anderen Worten, es würde Tests und gesegnete Repos geben, aber keine Produktion ). Natürlich können die menschlichen Tests nicht automatisiert werden, es ist nicht das, wonach ich suche.
Tamás Szelei
1
@ Tamás: Es könnte in Ordnung sein, das gesegnete Repo lokal auf Ihrem Server auszuchecken, wenn Sie dies meinen (Apache (oder ein anderer anständiger Webserver) macht es einfach, die Git-bezogenen Dateien von außen unzugänglich zu machen). Sie können es jedoch leicht "exportieren" . Es macht keinen Sinn, Dateien in Ihrer Webroot zu haben, die nicht dorthin gehören.
back2dos
Err -... Wie würden Sie also genau wissen, was die unbekannten Fehler unbekannter Schwere sind, wenn sie ... unbekannt sind ?
Spoike
@Spoike Ich denke, back2dos befürwortet einfach gründliche Tests mit festen Releases, die keine "Quick n Dirty" -Fixes haben, die nicht getestet wurden.
Max
@Spoike: In 24-48h können Sie viele unbekannte Fehler in bekannte Fehler verwandeln. Außerdem können Sie in 5 Minuten einen bekannten Fehler in viele unbekannte Fehler verwandeln. Dies wird als schnelle Lösung bezeichnet.
back2dos
2

Ich habe viel über den Einsatz gelernt, indem ich mir angesehen habe, wie Capistrano funktioniert. Ich habe zu der Zeit mit RoR gearbeitet, daher war es eine logische Entscheidung, und obwohl ich es für das Projekt, an dem ich arbeitete, nie ganz verstanden habe, war die Art und Weise, wie automatisierte Updates durchgeführt werden, sehr nützlich.

Möglicherweise befinden Sie sich in einer Situation, in der Sie es sogar direkt verwenden können - es ist nicht unbedingt an Rails gebunden -, aber wenn nicht, ist das Verhalten sicherlich hilfreich.

Glenatron
quelle
1

Je nachdem, welche Plattform Sie verwenden, gibt es viele Tools, die für die Automatisierung von Produktionsversionen möglicherweise sinnvoll sind. Ich arbeite in einem .NET-Shop, daher verwenden wir NAnt (obwohl MSBuild heutzutage eine bessere Option ist). Java hat Ant und möglicherweise andere Dinge. Ruby hat Dinge wie Rake. Dann gibt es kontinuierliche Integrationsplattformen wie TeamCity und Hudson, die auch zum Verwalten von Releases verwendet werden können.

Ich habe noch nie gesehen oder gehört, dass der Produktcode direkt in einem separaten Quellcodeverwaltungs-Repo enthalten ist, aber das könnte sicherlich funktionieren. Wie back2dos sagte, ist der Schlüssel die Automatisierung. Wir haben unsere Build-Skripte so konzipiert, dass sie die Quellcodeverwaltung auschecken, erstellen und zum Testen in die Staging-Umgebung übertragen können. Wenn uns dann gefällt, wie Staging funktioniert, werden die Skripte von QA nach Prod kopiert.

Meine Empfehlung ist, sich die Werkzeuge dort draußen anzusehen und eines auszuwählen und dann einen Prozess zu entwerfen, der mit dem ausgewählten Werkzeug gut funktioniert. Versuchen Sie nicht, das Rad zu stark neu zu erfinden - dies ist ein sehr gelöstes Problem.

RationalGeek
quelle