Wie automatisiere ich die Einrichtung der Entwicklungsumgebung? [geschlossen]

80

Jedes Mal, wenn ein neuer Entwickler dem Team oder dem Computer beitritt, den ein Entwickler verwendet, muss der Entwickler viel Arbeit leisten, um die lokale Entwicklungsumgebung so einzurichten, dass das aktuelle Projekt funktioniert. Als SCRUM-Team versuchen wir, alles zu automatisieren, einschließlich Bereitstellung und Tests. Ich frage also: Gibt es ein Tool oder eine Vorgehensweise, um die Einrichtung der lokalen Entwicklungsumgebung zu automatisieren?

Zum Beispiel musste ich zum Einrichten meiner Umgebung zuerst Eclipse installieren, dann SVN, Apache, Tomcat, MySQL, PHP. Danach habe ich die Datenbank gefüllt und musste geringfügige Änderungen an den verschiedenen Konfigurationsdateien usw. vornehmen. Gibt es eine Möglichkeit, diese Arbeit auf einen Klick zu reduzieren?

Nimcap
quelle

Antworten:

67

Es gibt mehrere Optionen, und manchmal ist eine Kombination davon nützlich:

  • automatisierte Installation
  • Disk Imaging
  • Virtualisierung
  • Quellcode-Kontrolle

Details zu den verschiedenen Optionen:

  1. Automatisierte Installationstools zur Automatisierung der Installation und Konfiguration der verschiedenen Dienste, Tools und Konfigurationsdateien einer Workstation:

    • Puppe hat eine Lernkurve, ist aber mächtig. Sie definieren Klassen von Maschinen (Entwicklungsbox, Webserver usw.) und führen dann die erforderlichen Schritte aus, um die Box zu installieren, zu konfigurieren und im richtigen Zustand zu halten. Sie haben um einen Klick gebeten, aber Puppet ist standardmäßig ein Nullklick, da Ihr Computer regelmäßig überprüft wird, um sicherzustellen, dass er weiterhin wie gewünscht konfiguriert ist. Es erkennt, wenn eine Datei oder ein Modus geändert wurde, und behebt das Problem. Ich verwende dies derzeit, um eine Handvoll RedHat Linux-Boxen zu warten, obwohl es Tausende verarbeiten kann. (Unterstützt Windows ab dem 08.05.2009 nicht).
    • Cfengine ist eine andere. Ich habe gesehen, dass dies in einem Geschäft mit 70 Ingenieuren, die RedHat Linux verwenden, erfolgreich eingesetzt wurde. Seine Einschränkungen waren Teil des Grundes für Puppet.
    • SmartFrog ist ein weiteres Tool zum Konfigurieren von Hosts. Es unterstützt Windows.
    • Shell-Skripte. RightScale enthält Beispiele zum Konfigurieren eines Amazon EC2-Images mithilfe von Shell-Skripten.
    • Installieren Sie Pakete. Auf einer Unix-Box ist dies vollständig mit Paketen möglich, und unter Windows ist MSI möglicherweise eine Option. Zum Beispiel RubyWorks liefert Ihnen eine vollständige Ruby on Rails - Stack, die alle durch ein Paket installieren, die wiederum andere Pakete über Abhängigkeiten installiert.
  2. Disk Images Dann gibt es natürlich auch Disk Imaging-Tools zum Speichern eines Images eines konfigurierten Hosts, sodass es auf einem anderen Host wiederhergestellt werden kann. Wie bei der Virtualisierung ist dies besonders gut für Testboxen geeignet, da es einfach ist, Dinge auf einem sauberen Schiefer wiederherzustellen. Es ist immer noch ein Problem, die Dinge ständig auf dem neuesten Stand zu halten. Lohnt es sich, neue Images zu erstellen, nur um eine Änderung der Konfigurationsdatei zu verbreiten?

  3. Die Virtualisierung ist eine weitere Option, z. B. das Erstellen von Kopien eines Xen-, VirtualPC- oder VMWare-Images, um neue Hosts zu erstellen. Dies ist besonders nützlich bei Testboxen, unabhängig davon, welches Durcheinander ein Test verursacht, können Sie problemlos einen sauberen, bekannten Zustand wiederherstellen. Wie bei Disk Imaging-Tools erfordert das Aktualisieren von Hosts mehr manuelle Schritte und Wachsamkeit als bei Verwendung eines automatisierten Installations- / Konfigurationstools.

  4. Quellcodeverwaltung Sobald Sie die erforderlichen Tools installiert / konfiguriert haben, sollten Sie beim Erstellen von Builds überprüfen, was von einem Quellcode-Repository benötigt wird, und es erstellen.

Derzeit verwende ich eine Kombination der oben genannten Methoden, um den Prozess wie folgt zu automatisieren:

  • Beginnen Sie mit einer Barebone-Betriebssysteminstallation auf einem VMWare-Gast
  • Führen Sie ein Shell-Skript aus, um Puppet zu installieren und seine Konfigurationen aus der Quellcodeverwaltung abzurufen
  • Marionette zum Installieren von Tools / Komponenten / Konfigurationen
  • Überprüfen Sie Dateien aus der Quellcodeverwaltung, um unsere Webanwendung zu erstellen und bereitzustellen
Pete TerMaat
quelle
In unserem Büro gibt es Windows, Linux und Mac OS. Also werde ich die Virtualisierungsoption auswählen.
Nimcap
Wir fliegen mit Virtualisierung und es ist eine gute Lösung. Als ich anfing, brauchte ich 3-4 Tage, um mich einzurichten. Jetzt werden neue Entwickler in der Zeit eingerichtet, die zum Kopieren eines VPC-Images benötigt wird.
Burt
5
Haben Sie agile.dzone.com/articles/4-methods-automate-development geschrieben, weil es sehr ähnlich klingt?
Aaron D
5
Nein, ich habe diesen Artikel nicht geschrieben, obwohl ich nach den Ähnlichkeiten zu urteilen scheint, dass ich ihn inspiriert habe. :-)
Pete TerMaat
20

Ich bin über diese Frage gestolpert und war sehr überrascht, dass noch niemand Vagrant erwähnt hat.

Landstreicher

Wie Pete TerMaat und andere bereits erwähnt haben, ist Virtualisierung eine hervorragende Möglichkeit, Entwicklungsumgebungen zu verwalten und zu automatisieren. Vagrant nimmt im Grunde genommen den Schmerz vom Einrichten dieser virtuellen Boxen.

Innerhalb weniger Minuten können Sie eine völlig neue Kopie Ihres Lieblings - Linux distro und läuft, und provisioniert genau die gleiche Art und Weise des Produktionsserver ist.

Keine Kämpfe mehr mit OSX oder Windows, um PHP, MySQL usw. zu installieren. Die gesamte Software lebt und läuft in der virtuellen Maschine. Sie können sogar SSH mit vagrant ssh. Wenn Sie einen Fehler machen oder etwas kaputt machen, machen Sie vagrant destroyes einfach und vagrant upfangen Sie von vorne an.

Vagrant erstellt automatisch einen synchronisierten Ordner mit Ihrem lokalen Dateisystem, sodass Sie nicht innerhalb der virtuellen Maschine entwickeln müssen (dh mit Vim). Verwenden Sie einen beliebigen Editor.

Ich erstelle jetzt für fast jedes Projekt, das ich mache, eine neue "Vagrant-Box". Alle meine Einstellungen werden im Projekt-Repository gespeichert, sodass es einfach ist, ein anderes Teammitglied zu gewinnen. Sie müssen einfach das Repo ziehen und rennen vagrant up, und sie sind buchstäblich bereit zu gehen.

Dies erleichtert auch die Bearbeitung von Projekten mit unterschiedlichen Softwareanforderungen erheblich. Vielleicht haben Sie einige Projekte, die auf PHP 5.3 basieren, aber einige neuere, die PHP 5.4 ausführen. Installieren Sie einfach die gewünschte Version für dieses Projekt.

Hör zu!

Jonathan
quelle
1
Das Debuggen kann in virtualisierten Umgebungen schmerzhaft sein
Jonathan
13

Ein wichtiger Punkt ist, Ihre Projekte in der Quellcodeverwaltung so einzurichten, dass Sie sie sofort nach dem Auschecken erstellen, bereitstellen und ausführen können.

Das bedeutet, dass Sie auch die Hilfsinfrastruktur wie Makefiles, Ant-Buildfiles usw. und Einstellungen für die Tools wie IDE-Projektdateien einchecken sollten.

Das sollte den Einrichtungsaufwand für einzelne Projekte beseitigen.

Für die grundlegende Maschineneinrichtung können Sie ein Standardabbild verwenden. Eine weitere Option ist die Verwendung der Tools Ihrer Plattform zur Automatisierung der Installation. Unter Linux können Sie ein Metapaket erstellen, das von allen benötigten Paketen abhängt. Unter Windows sollte etwas Ähnliches mit MSI oder ähnlichem möglich sein.

Bearbeiten:

Anstatt die Hilfsinfrastruktur einzuchecken, checken Sie im Idealfall die Informationen ein, mit denen der Build die Hilfsinfrastruktur generieren kann . Dies ist der Ansatz, der beispielsweise vom GNU-Build-System (Autotools usw.) oder von Maven verfolgt wird. Dies ist noch eleganter, da Sie (theoretisch) eine Infrastruktur für jede (unterstützte) Build-Umgebung generieren können, sodass Sie nicht an eine bestimmte IDE gebunden sind und die Einstellungen in der Hilfsinfrastruktur (Pfade usw.) nicht dupliziert werden müssen die wichtigsten Projekteinstellungen.

Dies ist jedoch auch ein komplexerer Ansatz. Wenn Sie ihn also nicht zum Laufen bringen können, ist es meiner Meinung nach akzeptabel, Dinge wie IDE-Dateien direkt einzuchecken.

sleske
quelle
7

Ich verwende gerne Virtual PC oder VMware, um die Entwicklungsumgebung zu virtualisieren. Dies bietet eine Standard- "Entwicklungsumgebung", die von Entwicklern gemeinsam genutzt werden kann. Sie müssen sich keine Gedanken über Software machen, die der Benutzer seinem System hinzufügen könnte und die möglicherweise mit Ihrer Entwicklungsumgebung in Konflikt steht. Es bietet mir auch die Möglichkeit, an zwei Projekten zu arbeiten, bei denen sich die Entwicklungsumgebungen nicht beide auf einem System befinden können (unter Verwendung von zwei verschiedenen Versionen einer Kerntechnologie).

jeremyasnyder
quelle
Beeinträchtigt das Ausführen in einer VirtualPc / VMWare-Umgebung die Leistung erheblich? Verwenden Sie Visual Studio 2008?
Joel Gauvreau
Ich kenne mindestens einen großen Software-Entwickler-Shop, der die gesamte Entwicklung ausschließlich in VMs (VMWare) durchführt. Jetzt, wo CPUs Hardware-Virtualisierungsunterstützung unterstützen, ist es viel besser ...
Tomfanning
Sie müssten auf Computernamenkonflikte achten. Windows ist nicht sehr glücklich, wenn zwei Computer mit demselben Namen in einem einzigen Netzwerk angezeigt werden. Ich bevorzuge es auch, meine Entwicklungsumgebung nicht in einer VM zu haben. Der Overhead kann meine Leistung wirklich beeinträchtigen.
Kieveli
2
Wir verwenden eine vollständig virtualisierte Dev-Umgebung. Wir verwenden VMServer oder VirtualBox, um die Vista-VMs zu hosten. Das VM-Image enthält unseren gesamten Entwicklungsstapel, ist jedoch nicht an die Unternehmensdomäne angehängt. Wenn ein Benutzer einen neuen Computer benötigt, kopiert er ihn lokal, führt NewSID aus und tritt der Domäne mit einem eindeutigen Computernamen bei. Auf moderner Hardware ist kein Leistungsabfall erkennbar. Wir verwenden VS2008 mit ~ 20 C ++ / C # -Projekten in einer Lösung und alles funktioniert einwandfrei.
Colin Desmond
Ein großer Vorteil, den ich bei der Virtualisierung sehe, ist die Möglichkeit, den aktuellen Status unverändert zu speichern, sodass Sie, wenn Sie später darauf zurückkommen, genau dort zurückkehren, wo Sie waren. Nicht gerade mit dem Einrichten einer neuen Entwicklungsmaschine verbunden, aber ein netter Nebeneffekt bei der Verwendung einer VM.
Joel Gauvreau
3

Verwenden Sie Puppet , um sowohl Ihre Entwicklungs- als auch Ihre Produktionsumgebung zu konfigurieren. Die Verwendung eines erstklassigen Automatisierungssystems ist die einzige Möglichkeit, Ihre Operationen zu skalieren.

David Schmitt
quelle
1

Es besteht immer die Möglichkeit, virtuelle Maschinen zu verwenden (siehe z . B. VMWare Player ). Erstellen Sie eine Umgebung und kopieren Sie sie für jeden neuen Mitarbeiter mit minimalem Konfigurationsaufwand.

tehvan
quelle
1

An einem früheren Ort hatten wir alles (und ich meine ALLES) in SCM (Clearcase, dann SVN). Wenn ein neuer Entwickler dies tun kann, hat er ClearCase | SVN installiert und das Repository abgesaugt. Dies behandelt auch den Fall, dass Sie eine bestimmte Bibliothek / ein bestimmtes Tool aktualisieren müssen, da Sie nur die Entwicklerteams ihre Umgebung aktualisieren lassen können.

Wir haben dafür zwei Repos verwendet, sodass Code und Tools / Config an verschiedenen Orten lebten.

Mike Reedell
quelle
1

Ich kann Blueprint von DevStructure nur empfehlen. Es ist Open Source und Ihr Anwendungsfall ist genau der Grund, warum wir die Software ursprünglich geschrieben haben. Unsere Ziele haben sich etwas geändert, aber es ist immer noch das perfekte Werkzeug für das, was Sie beschreiben. Kurz gesagt, Sie können wiederverwendbare Serverkonfigurationen erstellen - eine absolut einfache Konfigurationsverwaltung. Ich hoffe das hilft!

https://github.com/devstructure/blueprint (Blueprint @ Github)

Matt Tanase
quelle
1
Geht es um Entwicklungsumgebung oder Server?
Nimcap
1

Ich habe selbst darüber nachgedacht. Es gibt einige andere Technologien, die Sie in die Mischung einbringen könnten. Folgendes richte ich gerade ein:

  • PXE-basierte vorab gesetzte Installationsimages (Debian Squeeze). Sie können eine Bare-Metal-Maschine (oder eine neue virtuelle Appliance) starten und das Image aus dem PXE-Startmenü auswählen. Dies hat den großen Vorteil, dass Sie Ihre Umgebung auf physischen Maschinen (zusätzlich zu virtuellen Appliances) installieren können.
  • Jemand hat Puppet bereits erwähnt. Ich benutze CFEngine, aber es ist ein ähnlicher Deal. Im Wesentlichen wird Ihre Konfiguration in Richtliniendateien dokumentiert und zentralisiert, die von einem Agenten auf dem Client kontinuierlich erzwungen werden.
  • Wenn Sie keine starre Umgebung wünschen (dh Entwickler können eine Kombination von Tool-Sets auswählen), können Sie Ihre eigenen Deb-Pakete rollen, damit neue Entwickler tippen sudo apt-get install acmecorp-eclipse-envoder sudo apt-get install acmecorp-intellij-envzum Beispiel.
  • Etwas abseits des Themas, aber wenn Sie eine Debian-basierte Umgebung (z. B. Ubuntu) ausführen, sollten Sie die Installation in Betracht ziehen apt-cacher(Paket-Proxy). Zusätzlich zur Einsparung von Bandbreite werden Ihre Installationen viel schneller (da Pakete in Ihrem lokalen Netzwerk zwischengespeichert werden).
hoipolloi
quelle
0

Wenn Sie Computer in einer Standardkonfiguration verwenden, können Sie die Festplatte mit einer neuen, perfekt konfigurierten Installation abbilden - dies ist ein sehr beliebter Ansatz in vielen Unternehmen (und nicht nur für Entwickler). Wenn Sie separat konfigurierte Betriebssysteme benötigen, können Sie alle hinzugefügten und geänderten Dateien tar-bz2, sobald ein konfiguriertes Betriebssystem in das gewünschte Setup umgewandelt wurde, und es einfach als root entpacken, um die gewünschte Umgebung von Grund auf neu zu erstellen.

Alex Martelli
quelle
0

Wenn Sie eine Linux-Variante verwenden, haben Sie wahrscheinlich ein Paketverwaltungssystem: denkt .rpm für Fedora / Redhat oder .deb für Ubuntu / Debian. Für viele der von Ihnen beschriebenen Dinge sind bereits Pakete verfügbar: svn, eclipse usw. Sie können Ihre eigenen Pakete für unternehmensspezifische Software rollen, ein Repository erstellen (möglicherweise nur im lokalen Netzwerk verfügbar) und dann Ihr Setup auf ein einziges reduzieren Bash-Skript, das das Firmen-Repo zu /etc/apt/sources.list (debian / ubuntu) hinzufügt und dann einen Befehl wie folgt aufruft:


/home/newhire$ apt-get update && apt-get install some complete package list

Sie können Buildbot verwenden, um dann regelmäßige Builds für Unternehmenspakete zu automatisieren, die sich häufig ändern.

si28719e
quelle
0

Probieren Sie DevScript unter http://nsnihalsahu.github.io/devscript aus . Es ist ein Befehl wie devscript lampoder devscript laraveloder devscript django. In wenigen Minuten, abhängig von der Geschwindigkeit Ihrer Internet-Co

Nihal Sahu
quelle