Effektive Art und Weise, vergangene Projekte in ihrer Arbeitsumgebung zu halten?


19

Ich stelle fest, dass es immer dann, wenn ich ein früheres Projekt ausführen möchte, lange dauern wird, bis ich es finde und alles wieder eingerichtet ist, damit es ausgeführt werden kann.

Zum Beispiel habe ich Python-Projekte, die ich in Linux erstellt habe, und es hängt von Software-Paketen ab, die leicht in Linux installiert werden können, aber ich habe nicht mehr die Linux-VM, die ich verwendet habe. Und einige meiner anderen Projekte hängen von anderen Variablen wie der Webserverkonfiguration, den PATH-Variablen, dem SDK, der IDE, der Betriebssystemversion, dem Gerät usw. ab.

Hat jemand eine effektive Möglichkeit, dieses Problem zu lösen? Bisher habe ich mich nur darum gekümmert, den Quellcode zu sichern. Es ist jedoch schwierig, die Arbeitsentwicklungsumgebung wiederherzustellen, und es ist auch schwierig, die Arbeitsentwicklungsumgebung beizubehalten .


6
NSA ist mein Backup
Steffe

Antworten:


17

In der Vergangenheit habe ich entweder die physische Entwicklungsmaschine in eine VM konvertiert oder, falls es sich bereits um eine VM handelt, diese für die zukünftige Verwendung aufbewahrt. Es ist nicht so effizient, wie ich es mir für die Nutzung des Festplattenspeichers gewünscht hätte, aber der Speicherplatz ist billig. Außerdem ist dieser Prozess zeitlich so viel kostengünstiger als der Versuch, eine Umgebung in Zukunft neu zu konfigurieren, falls dies erforderlich sein sollte.


2
Ich denke, Sie müssen auch Kopien der gesamten Software / Version behalten und Ihr Projekt von einem Skript aus installieren. Es ist ein großer Fortschritt, die Installation jedes Mal schnell reproduzieren zu können .
tzerb

Dies war, was ich in der Vergangenheit getan habe ... war großartig, um verschiedene Client-Umgebungen usw. zu unterstützen. Wenn Sie eine Basis-VM verwenden, kann jede nachfolgende VM nur eine Diff-Datei sein, die Speicherplatz spart, wenn es eine ist Problem ... Aber ich persönlich denke, Festplatten sind billig. :-)
davewasthere

Mit der immer besseren LXC-Unterstützung ist es sicher, diese anstelle von VMs für Linux-Umgebungen zu verwenden. Es ist viel weniger ressourcenintensiv und viel schneller. ATM das beste Werkzeug, um sie zu verwalten, ist Docker
karka91

11

Meine derzeitige bevorzugte Methode besteht darin, ein Skript zu verwalten, das ALLE für ein Projekt erforderlichen Abhängigkeiten installiert, den Quellcode herunterlädt und alles verknüpft. Einige Skripte haben zwei Modi - einen für die Produktion, der normalerweise eine Teilmenge des anderen Modus ist: Entwicklung.

In einigen Umgebungen dauert die Installation mit einem Skript nur ca. 5 Minuten. In diesem Fall behalte ich eine lokale VM mit einer Neuinstallation des Zielbetriebssystems, auf dem ich das Projektskript bereitstelle, wenn ich morgens bei der Arbeit bin. Anschließend wird die gesamte Codierung ausgeführt zugehörige Arbeit an dieser VM-Instanz. Bevor ich gehe, schiebe ich alle Änderungen per Git auf meine physische Maschine oder unser zentrales Repository und beende die VM.

Wenn die Einrichtung der Umgebung länger dauert (lange Installationszeiten, große Dateien zum Herunterladen usw.), führe ich die obigen Schritte einmal pro Woche aus.

Der Vorteil besteht darin, dass die Bereitstellung auf einem neuen Computer und / oder Produktionsserver sehr einfach ist, alles im Skript dokumentiert ist und das Skript sehr oft überprüft wird.


4

Das Konzept, das Sie beschreiben, ist das Konfigurationsmanagement. Dies ist, wie es sich anhört, eine Möglichkeit, eine Umgebung zu identifizieren, aufzuzeichnen, zu versionieren / zu verfolgen und zu melden. Es handelt sich häufig um eine Aufgabe, die in engem Zusammenhang mit der Versionskontrolle und dem Build-Management steht, die jedoch häufig eine separate Strategie erfordert, selbst wenn dieselben Konzepte und dieselben Verarbeitungs- und Speichermechanismen verwendet werden.

Das Konfigurationsmanagement hilft nicht nur dabei, die Arbeitsumgebung unter Kontrolle zu halten, sondern auch, Aufzeichnungen über die verschiedenen Arbeitsumgebungen zu erstellen, in denen Software verwendet wird (Entwicklung wie erwähnt, plus Tests / Qualitätssicherung, Bereitstellung für Routinekunden, Bereitstellung für Kunden, die besondere Überlegungen oder spezielle Konfigurationen erfordern oder Eigenschaften bauen, und so weiter).

Wie ich bereits sagte, ist dies häufig eine Aufgabe, die mit der Versionskontrolle der Quelle zusammenfällt, und häufig befinden sich Konfigurationsverwaltungsdaten sowohl in der Dokumentation als auch im Quellrepository neben der Quelle. Es muss nicht sein, ist aber oft eine Frage der Bequemlichkeit.

Die Automatisierung einiger Aspekte des Konfigurationsmanagements hat sich in den letzten Jahren erheblich verbessert. Einige Antworten und Kommentare schlugen Skripte vor, um das Konfigurationsmanagement voranzutreiben, und Skripte sind eine gute Antwort, um reproduzierbare Ergebnisse zu erzielen. Oftmals sind handgefertigte Skripte für sich allein jedoch inkonsistent und unvollständig. Eine Möglichkeit, die sich verbessert hat, ist die automatische Bereitstellung. Systeme wie Marionette oder Kochhelfen Sie dabei, Softwarekomponenten und -systeme für einen bestimmten Benutzer oder eine bestimmte Maschine oder für ein bestimmtes Aufgabenprofil anzugeben, und stellen Sie „Rezepte“ bereit, die ein einfaches Einrichten einer vollständigen Maschine oder Umgebung ermöglichen. Grundsätzlich wird das Konzept eines Softwareverteilungs-Repositorys übernommen und erweitert und verallgemeinert, wobei nicht nur die für ein System erforderlichen Softwarepakete bereitgestellt werden, sondern auch die für jedes Paket spezifischen Konfigurationsprofile, damit es in der für Sie geeigneten Weise verwendet werden kann Lage.

Vagrant nimmt dies in eine etwas andere Richtung und bietet eine Möglichkeit, die Definitionen virtueller Maschinen schnell hochzufahren, sodass die virtuelle Software und Hardware einer VM automatisch bereitgestellt werden kann und sich als bequeme Methode zur Reproduktion einer bestimmten Darstellung einer Hardware herausstellt vom Benutzer Ihrer Software verwendete Umgebung.

Jedes System (und jede Variante) benötigt ein wenig Zeit, um eingerichtet zu werden, hat jedoch einen eindeutigen Wert, wenn Sie das erneute Laden und Neukonfigurieren als allgemeine Aufgabe ansehen.


Könnten Sie bitte näher auf die Strategie eingehen, die Sie in Ihrer Erklärung erwähnt haben, "die jedoch deutlich genug ist, dass häufig eine separate Strategie erforderlich ist"? Ich wollte Vagrant verwenden und eine VM-Konfiguration im Repository meines Quellcodes speichern. Ich frage mich, an welchem ​​Punkt dies anders behandelt werden müsste.
CL22

3

Docker wäre eine gute Option. Sie können eine Docking-Datei als Manifest für die gewünschte VM verwenden. Sie müssen kein Bild speichern, es wird das erforderliche heruntergeladen. Es können auch eigene Images verwendet werden, sodass Sie ein eigenes Basisimage erstellen und dann die für die Umgebung erforderlichen Komponenten hinzufügen können.

Mit Docker können Sie auch andere Bereiche Ihres Workflows verbessern:

  • Die erstellte Umgebung kann in dasselbe CVS wie Ihr Projekt gestellt werden, wodurch Sie eine versionierte Umgebung erhalten (ordentlich!).
  • Mit dem Andockfenster können Sie die Live-Umgebung bereitstellen und den Aufwand für das Starten Ihrer Projekte in der Produktion verringern.
  • Wenn andere mit Ihnen zusammenarbeiten, benötigen sie lediglich die Docking-Datei, um das riesige Umgebungs-Setup zu laden.

Die hier vorgestellten Ideen zur Verwendung einer VM stimmen also nur teilweise. Ich weiß, dass Festplatten immer größer werden, aber dies ist kein Grund, den gesamten verfügbaren Speicherplatz zu nutzen. Wenn eine VM-Umgebung intern mehr Festplattenspeicher benötigt, kann dies etwas schwierig sein, und es besteht die Möglichkeit, dass Sie einen neu erstellen müssen. Obwohl die Dateigröße möglicherweise kein Problem darstellt, wird die Internetgeschwindigkeit immer noch zum Engpass, wenn Sie über eine normale DSL-Verbindung über 5Go senden müssen.


2

Die meisten Systeme (Sprachen, Laufzeiten oder Betriebssysteme) verfügen über eine standardisierte Methode zur Installation von Software und Konfigurationen. Versuchen Sie daher, diese zu verwenden. Sowie:

  • Maven oder Gradle für Java
  • CPAN für Perl
  • rpm für RedHat / Fedora
  • dpkg / apt-get für Linux
  • MSI-Pakete für Windows

Machen Sie dann Installationsanweisungen, die genau erklären, was installiert werden muss / welche Schritte erforderlich sind:

  • Geben Sie kurze Anweisungen zu Ihrer voraussichtlichen Installation (Basisbetriebssystem, Basislaufzeit wie Java / Perl / Python ...).
  • Schreiben Sie ein kurzes Skript, das die erforderlichen Installationen ausführt (idealerweise nur ein Aufruf eines Tools wie Maven).
  • Testen Sie dies bei einer Neuinstallation (z. B. auf einer VM)

Dann sollten Sie in der Lage sein, die Umgebung neu zu erstellen, und andere sollten dies auch können (was wichtig sein kann, wenn es sich nicht um ein Einzelprojekt handelt).

Möglicherweise müssen Sie die erforderlichen Installationspakete irgendwo speichern, oder Sie können lediglich Anweisungen zum Herunterladen hinzufügen (es sei denn, das System verfolgt diese, z. B. apt-get oder Maven). Das hängt davon ab, wie sehr Sie den Anbietern der Pakete vertrauen - es ist wahrscheinlich nicht erforderlich, Debian-Kernpakete zu speichern, aber mit einem kleinen freien Softwareprojekt könnte dies eine gute Idee sein.

Die VM-Lösung funktioniert auch und ist auf kurze Sicht wahrscheinlich weniger arbeitsintensiv (behalten Sie einfach die VM bei). Ich bin jedoch der Meinung, dass diese Lösung mehr Flexibilität bietet, zum Beispiel beim Ändern der Umgebung.

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.