Ist es empfehlenswert, ein Projekt Datei für Datei manuell auf dem Server bereitzustellen?


26

Die Firma, für die ich jetzt arbeite, implementiert noch keine kontinuierliche Lieferung. Wir stellen das Projekt weiterhin manuell Datei für Datei auf dem Server bereit. Was ist die bewährte Methode: Manuelles Bereitstellen eines Projektartefakts für jede Bereitstellung oder Datei für Datei weiter bereitstellen?


12
Für diese Aufgabe gibt es nicht einmal eine "Einheit für alle Situationen".
Whatsisname

26
Normalerweise würde ich verlinken zu Warum ist es eine schlechte Sache, eine Frage zu "Best Practice" zu stellen? Ich denke, wir können uns alle einig sein, dass dies die schlimmste Praxis ist. Es rangiert etwas höher als "den Server in Brand setzen".


9
Ich vermute, dass OP diese Frage stellt, weil er die Antwort bereits kennt und sein Arbeitsplatz Doing It Wrong (tm) ist, und OP versucht, Beweise zu sammeln, um zu begründen, wie sie die Art und Weise ändern, wie sie Dinge tun.
user1936

2
Wir haben es im zweiten Jahrtausend so gemacht. Sollte gut sein! ;)
Don Branson

Antworten:


103

Welches ist die beste Vorgehensweise? Manuelles Bereitstellen eines Projektartefakts pro Bereitstellung oder Weiterarbeiten der Datei nach Dateibereitstellung?

Weder.

Best Practice besteht darin, Ihre Bereitstellung vollständig und ausschließlich zu automatisieren . Das bedeutet, dass niemand etwas manuell auf einen Server legen kann .

"Um die Zusammenfassung der Zusammenfassung zusammenzufassen: Menschen sind ein Problem." (Douglas Adams)

Menschen machen Fehler. Wenn eine der Dateien, die Sie vergessen haben, zu kopieren, eine gemeinsam genutzte "Bibliothek" ist, die umfassend geändert wurde, können Sie den gesamten Produktionsstandort zum Absturz bringen.


17
@JohnHamilton Wenn die Automatisierung der Kompilierung eine schwierige Aufgabe ist, muss sie auf lange Sicht gelöst werden. Sie müssen keine Entwicklungs-, Test- und Vorproduktionsumgebungen mit vollständig automatisierter Bereitstellung haben, aber die Erstellung eines Standardbereitstellungspakets sollte die Standardpraxis sein.
Neil

20
Ähm, die Größe des Unternehmens ist nicht wirklich das Problem (bis zu einem gewissen Grad). Die Kosten hängen davon ab, inwieweit die Bereitstellung automatisiert ist und auch von der Komplexität der Produktionsumgebung ab. Aber es gibt einen Gradienten der Automatisierung und des Gradienten der "Kosten" (Zeit / Geld), beginnend mit einfachen Dingen wie dem Kopieren der Build-Ausgabe in die Produktion (kleine Investition mit sofortigen spürbaren Kosteneinsparungen) und dem Hochfahren von dort, und es hängt mehr davon ab auf Management Buy-off als Unternehmensgröße.
BurnsBA

39
@JohnHamilton: Ein kleineres Unternehmen, das schlecht geführt wird, könnte sich das denken lassen, klar. Das Automatisieren des Kopierens von Dateien ist nicht gerade eine schwierige Aufgabe, und die Kosten dafür, dass ein Angestellter dies regelmäßig tut, überwiegen bei weitem die Kosten für das Schreiben selbst des trivialsten Skripts, um dies zu tun.
GManNickG

8
@JohnHamilton: Die Kosten für die Automatisierung müssen gegen das Risiko von Fehlern beim manuellen Einsatz abgewogen werden.
Robert Harvey

7
Sie brauchen nicht einmal unbedingt Jenkins. Nur ein eingechecktes Skript mit einer Reihe von scp-Befehlen (oder was auch immer Sie beim manuellen Hochladen verwenden) wäre eine Verbesserung.
user253751

14

Manuelle Schritte sind sehr aufwändig und riskant: Möglicherweise vergessen Sie eine erforderliche Datei. Vielleicht weiß nicht jeder in Ihrem Team, welche Dateien kopiert werden müssen. All diese Probleme machen Bereitstellungen groß, entmutigend und selten - völlig unnötig. Die Automatisierung adressiert diese.

Selbst der einfachste Automatisierungsschritt kann große Vorteile haben, da Bereitstellungen trivial werden. Ein Skript, das die Dateien oder Artefakte über (S) FTP oder Rsync oder eine andere Technologie kopiert, ist ein guter erster Schritt. Sie können dieses Skript später erweitern, um Schritte vor und nach der Bereitstellung auf dem Server automatisch auszuführen, z. B. das Neustarten von Diensten.


Wenn die Gesamtzahl der Server 2 oder weniger beträgt, ist manuell weniger riskant als automatisch. Automatisch erfordert eine umfangreiche Fehlerprüfung. Ich habe noch nie eine triviale automatische Lösung gesehen, die trivial geblieben ist.
Joshua

3
@Joshua Ich bin mir nicht sicher, ob die Anzahl der Server hier eine Rolle spielen sollte. Automatisierung ist auch dann von Nutzen, wenn Sie mehrere Male auf demselben Server bereitstellen. Die Frage ist, wem Sie mehr vertrauen: dem Computer, der ein einmal funktionierendes Skript zuverlässig ausführt, oder Ihrer Fähigkeit, sich jedes Mal alle notwendigen Schritte zu merken? Als fehlbarer und vergesslicher Mensch habe ich eine starke Vorliebe dafür, Dinge nicht manuell zu tun. Manchmal schreibe ich sogar einmalige Aufgaben, damit ich die Befehle überprüfen kann, bevor ich sie ausführe. Das ist viel weniger riskant als zufällige Dinge manuell zu machen, bis es funktioniert!
amon

Ich habe umfangreiche Erfahrung in beide Richtungen. Das, was ich für die manuelle Bereitstellung mache, ist die Installation von xcopy. Es gibt also wirklich keine Schritte, von denen Sie einige vergessen müssen.
Joshua

9

Best Practice wäre die Implementierung eines automatisierten Prozesses.

Vergewissern Sie sich, dass es keinen besonderen Grund für die Vorgehensweise "Datei für Datei" gibt, den Sie berücksichtigen müssten.


1
Ich stelle diese Frage, weil ich nur sicherstellen möchte, dass es nicht die beste Praxis der Welt ist. Ich frage mich, ob es immer noch Unternehmen / Entwickler gibt, die ihre Apps / Projekte manuell bereitstellen, und was es noch schlimmer macht, ist die Bereitstellung von Dateien für Dateien in jeder Entwicklungsstufe.
Jake Muller

4
Die beste Frage lautet: "Warum machen wir das so?" Ich kann mir keinen Grund vorstellen, aber ich weiß, dass einige Unternehmen gerne eine manuelle Hand am Abzug haben
Ewan,

8
@JakeMuller Was Sie zwischen den Zeilen dieser Antwort lesen sollten, ist, dass Entscheidungen durch Überlegung der Situation getroffen werden sollten, nicht durch sklavisches Festhalten an dem, was jemand ohne Kenntnis davon für immer die richtige Antwort erklärt hatte.
Blrfl

Der Grund für die Datei-nach-Datei-Methode könnte darin liegen, dass Abhängigkeiten zwischen den Dateien bestehen und daher Dateiaktualisierungen bereitgestellt werden, bevor Änderungen an anderen Dateien vorgenommen werden, die von diesen Dateien abhängen. Das Aktualisieren der Dateien in der falschen Reihenfolge kann das System kurzzeitig unterbrechen.
BDSL

6

Mit Continuous Delivery (oder Deployment) und dem Verschieben jeder Datei von Hand betrachten Sie die beiden Extreme. Es ist vollkommen verständlich, dass Sie (noch) keine vollautomatische Pipeline erstellen können / möchten. Sie sollten jedoch überlegen, Teile des Prozesses zu automatisieren.

Das Verschieben jeder Datei von Hand ist sehr riskant. Sie können dieses Risiko verringern, indem Sie beispielsweise Ihr Code-Repository markieren, dieses Tag auf Ihrem Computer auschecken, Ihre Artefakte erstellen und sie auf Ihren Server hochladen. Jeder dieser Schritte kann automatisiert werden, sodass er mit wenigen Mausklicks ausgeführt werden kann. Dadurch wird das Risiko, dass eine Datei vergessen wird oder versehentlich zusätzliche Dateien angefordert werden.

Automatisieren Sie Schritt für Schritt, was Sie können. Die Tatsache, dass Sie sich keine vollautomatische CD-Pipeline leisten können, sollte Sie nicht davon abhalten, einige Teile zu automatisieren.


1

Es wird empfohlen, eine Kosten-Nutzen-Analyse für Ihre spezielle Bereitstellung für Ihr spezielles Unternehmen durchzuführen.

Die allgemeine Antwort lautet "Machen Sie keine Dinge manuell, automatisieren Sie." Dies ist im Allgemeinen die richtige Antwort für allgemeine Arten von Unternehmen. Die Einheitlichkeit der Antworten, die Sie erhalten, sollte ein Hinweis darauf sein, wie stark die Community dies als Best Practices ansieht. Wenn Ihr Unternehmen der Meinung ist, dass Automatisierung nicht das richtige Werkzeug ist, sollte es verstehen, was sie einzigartig macht. Diese Einzigartigkeit sollte in Ihren Entscheidungsprozess einfließen. Es gibt keine "Best Practices", wenn der Beispielsatz 1 ist.

Fragen wie "Wie viele Dateien" und "Wie oft werden Dinge aktualisiert" und "Welche Konsequenzen hat das Brechen von Dingen?" Und "Wie schnell können Sie eine fehlerhafte Änderung rückgängig machen" sind wichtige Fragen, die beantwortet werden müssen. Wenn Sie automatisieren, werden viele dieser Fragen unwichtig, sie sind jedoch für die ordnungsgemäße Zuordnung der Kosten und Vorteile eines manuellen Aktualisierungsprozesses unerlässlich.


1

Es gibt viele Graustufen zwischen manuellem Kopieren von Datei zu Datei und kontinuierlicher Zustellung.

Reduzieren Sie zunächst die Komplexität des Bereitstellungsprozesses, indem Sie beispielsweise eine Zip-Datei, eine RPM-ähnliche Verpackung, eine Infrastruktur als Codeverwaltungswerkzeug (z. B. Marionette oder Chefkoch) oder auch nur ein einfaches Skript verwenden, das die Dateien für Sie von einem kopiert Staging-Bereich auf dem FTP-Server.

Bereitstellungsprozesse mit mehr manuellen Schritten weisen mit größerer Wahrscheinlichkeit Fehler auf (und schlagen dadurch fehl). Nehmen Sie, wie andere bereits gesagt haben, das menschliche Element heraus.

Sie müssen nicht die vollständige kontinuierliche Bereitstellung implementieren (was kostenintensiv ist und mit der Zeit Aufwand / Investition / Innovation erfordert) - beginnen Sie einfach, lassen Sie es funktionieren, demonstrieren Sie die Vorteile - und gehen Sie von dort aus.


0

Dies hängt von der verwendeten Softwaretechnologie (oder dem Stapel) ab (interpretierte Sprache, kompilierte Sprache, Desktop-App, Mobiltelefon usw.). dev. Abteilungsrichtlinien: Wenn Sie über die Tools zur Automatisierung verfügen, ist Ihre App von entscheidender Bedeutung. Ein wichtiger Aspekt ist Ihre Softwarearchitektur (wie Ihre App entworfen wurde). Deshalb haben Sie hier unterschiedliche Antworten. Als Faustregel gilt, dass der beste Ansatz darin besteht, den menschlichen Eingriff in Bereitstellungsaufgaben so gering wie möglich zu halten, um Fehler zu vermeiden. Eine bewährte Methode besteht darin, vor der Bereitstellung alles in einem QA-Server zu testen (in Betracht zu ziehen, einen virtuellen Server zu verwenden, wenn das Budget ein Problem darstellt) und umgekehrt vorzugehen, um im Katastrophenfall die vorherige Version wiederherzustellen ( IMMER eine Sicherung durchführen).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.