it-swarm.com.de

Wie kann man das Setup der Entwicklungsumgebung automatisieren?

Jedes Mal, wenn ein neuer Entwickler dem Team beitritt oder der Computer, an dem ein Entwickler Änderungen vornimmt, muss der Entwickler eine Menge Arbeit ausführen, um die lokale Entwicklungsumgebung einzurichten, damit das aktuelle Projekt funktioniert. Als SCRUM-Team versuchen wir, alles einschließlich der Bereitstellung und der Tests zu automatisieren. Ich frage also: Gibt es ein Werkzeug oder eine Vorgehensweise, um die Einrichtung der lokalen Entwicklungsumgebung zu automatisieren?

Um beispielsweise meine Umgebung einzurichten, musste ich zuerst Eclipse installieren, dann SVN, Apache, Tomcat, MySQL und PHP. Danach füllte ich die Datenbank auf und ich musste kleinere Änderungen in den verschiedenen Konfigurationsdateien vornehmen. Gibt es eine Möglichkeit, diesen Aufwand auf einen Klick zu reduzieren?

78
nimcap

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

  • automatisierte Installation
  • disk-Imaging
  • virtualisierung
  • quellcode-Steuerung 

Details zu den verschiedenen Optionen:

  1. Automated Installation Tools zum Automatisieren der Installation und Konfiguration der verschiedenen Dienste, Tools und Konfigurationsdateien einer Workstation:

    • Puppet hat eine Lernkurve, ist aber mächtig. Sie definieren Klassen von Maschinen (Entwicklungsbox, Webserver usw.) und tun dann das Notwendige, um die Box zu installieren, zu konfigurieren und im richtigen Zustand zu halten. Sie haben nach einem Klick gefragt, aber Puppet ist standardmäßig auf Null angewiesen, da Ihr Computer regelmäßig überprüft wird, um sicherzustellen, dass er noch wie gewünscht konfiguriert ist. Es erkennt, wenn eine Datei oder ein Modus geändert wurde, und behebt das Problem. Derzeit verwende ich dies, um eine Handvoll RedHat-Linux-Boxen zu verwalten, obwohl es Tausende beherrscht. (Unterstützt Windows ab 2009-05-08 nicht). 
    • Cfengine ist eine andere. Ich habe dies in einem Geschäft mit 70 Ingenieuren, die RedHat Linux verwenden, erfolgreich eingesetzt. Seine Grenzen waren ein Grund für Puppet.
    • SmartFrog ist ein weiteres Tool zum Konfigurieren von Hosts. Es unterstützt Windows.
    • Shell-Skripte. RightScale enthält Beispiele für die Konfiguration eines Amazon EC2-Images mithilfe von Shell-Skripts.
    • Pakete installieren Auf einer Unix-Box ist es möglich, dies vollständig mit Paketen zu tun, und unter Windows ist MSI möglicherweise eine Option. Zum Beispiel bietet RubyWorks Ihnen einen vollständigen Ruby on Rails-Stack, indem Sie ein Paket installieren, das wiederum andere Pakete über Abhängigkeiten installiert.
  2. Disk Images Dann gibt es natürlich auch Disk Imaging Tools , um ein Image eines konfigurierten Hosts so zu speichern, dass es auf einem anderen Host wiederhergestellt werden kann. Wie bei der Virtualisierung ist dies vor allem für Testboxen schön, da es einfach ist, die Dinge auf eine saubere Ebene zurückzusetzen. Es ist immer noch ein Problem, die Dinge ständig auf dem neuesten Stand zu halten. Lohnt es sich, neue Bilder zu erstellen, nur um eine Änderung der Konfigurationsdatei zu verbreiten?

  3. Virtualization ist eine weitere Option, z. B. zum Erstellen neuer Hosts Kopien eines Xen-, VirtualPC- oder VMWare-Images. Dies ist besonders bei Testboxen hilfreich, da Sie unabhängig von der Unordnung, die ein Test erzeugt, problemlos in einen sauberen, bekannten Zustand zurückkehren können. Wie bei Disk-Imaging-Tools erfordert das Aktualisieren von Hosts mehr manuelle Schritte und Wachsamkeit als bei Verwendung eines automatisierten Install/Config-Tools.

  4. Quellcodeverwaltung Wenn Sie die erforderlichen Tools installiert/konfiguriert haben, sollten Sie beim Erstellen von Builds prüfen, was in einem Quellcode-Repository erforderlich ist, und sie erstellen.

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

  • Beginnen Sie mit einer Barebones-Betriebssysteminstallation auf einem VMWare-Gast
  • Führen Sie ein Shell-Skript aus, um Puppet zu installieren und seine Konfigurationsdateien von der Quellcodeverwaltung abzurufen
  • Puppet zum Installieren von Tools/components/configs
  • Checken Sie Dateien aus der Quellcodeverwaltung aus, um unsere Webanwendung zu erstellen und bereitzustellen
65
Pete TerMaat

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

Vagrant

Wie Pete TerMaat und andere bereits erwähnt haben, ist Virtualisierung eine hervorragende Möglichkeit, Entwicklungsumgebungen zu verwalten und zu automatisieren. Vagrant nimmt dem Erstellen dieser virtuellen Boxen im Grunde die Mühe.

Innerhalb weniger Minuten können Sie eine komplett neue Version Ihrer bevorzugten Linux-Distribution installieren und bereitstellen genau so wie Ihr Produktionsserver.

Kein Kampf 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 mit vagrant ssh SSH einspielen. Wenn Sie einen Fehler machen oder etwas kaputt machen, vagrant destroy einfach und vagrant up, um noch einmal von vorne zu beginnen.

Vagrant erstellt automatisch einen synchronisierten Ordner für Ihr lokales Dateisystem. Dies bedeutet, dass Sie nicht innerhalb der virtuellen Maschine entwickeln müssen (dh mit Vim). Verwenden Sie den von Ihnen gewünschten 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 Sie problemlos ein anderes Teammitglied einstellen können. Sie müssen einfach das Repo ziehen und vagrant up ausführen, und sie sind buchstäblich einsatzbereit.

Dies erleichtert auch die Abwicklung von Projekten mit unterschiedlichen Softwareanforderungen. Möglicherweise haben Sie einige Projekte, die auf PHP 5.3 angewiesen sind, aber einige neuere, die PHP ausführen. 5.4. Installieren Sie einfach die gewünschte Version für dieses Projekt.

Hör zu!

18
Jonathan

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-Build-Dateien usw. und Einstellungen für die Tools wie IDE Projektdateien einchecken sollten.

Das sollte den Einrichtungsaufwand für einzelne Projekte erleichtern.

Für die Grundeinstellung des Computers können Sie ein Standard-Image verwenden. Eine andere Möglichkeit besteht darin, die Tools Ihrer Plattform zur Automatisierung der Installation zu verwenden. Unter Linux können Sie ein Metapaket erstellen, das von allen Paketen abhängt, die Sie benötigen. Unter Windows sollte ein ähnliches mit MSI oder ähnlichem möglich sein.

Bearbeiten:

Im Idealfall checken Sie statt der Helferinfrastruktur die Informationen ein, die es dem Build ermöglichen, die Helferinfrastruktur zu generieren . Dies ist der Ansatz, den z.B. das GNU Build-System (Autotools usw.) oder von Maven. Dies ist umso eleganter, als Sie (theoretisch) eine Infrastruktur für jede (unterstützte) Build-Umgebung generieren können und somit nicht an z. Eine bestimmte IDE und Einstellungen in der Hilfsinfrastruktur (Pfade usw.) müssen nicht die Hauptprojekteinstellungen duplizieren.

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

13
sleske

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 Sorgen um Software machen, die der Benutzer zu seinem System hinzufügen könnte, was zu Konflikten mit Ihrer Entwicklungsumgebung führen könnte. Es bietet mir auch die Möglichkeit, an zwei Projekten zu arbeiten, bei denen sich die Entwicklungsumgebungen nicht auf einem System befinden können (wobei zwei verschiedene Versionen einer Kerntechnologie verwendet werden).

7
jeremyasnyder

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

3
David Schmitt

Ich habe selbst darüber nachgedacht. Es gibt einige andere Technologien, die Sie in die Mischung einbringen können. Hier ist was ich gerade einrichte:

  • PXE-basierte vorinstallierte 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 bereits Marionette erwähnt. Ich benutze CFEngine, aber es ist ein ähnlicher Deal. Ihre Konfiguration wird im Wesentlichen in Richtliniendateien dokumentiert und zentralisiert, die kontinuierlich von einem Agenten auf dem Client durchgesetzt werden.
  • wenn Sie keine starre Umgebung wünschen (d. h. Entwickler wählen möglicherweise eine Kombination von Tool-Sets), können Sie Ihre eigenen deb-Pakete so rollen, dass neue Entwickler beispielsweise Sudo apt-get install acmecorp-Eclipse-env oder Sudo apt-get install acmecorp-intellij-env eingeben können.
  • Etwas außerhalb des Themas, aber wenn Sie eine Debian-basierte Umgebung (d. H. Ubuntu) ausführen, sollten Sie apt-cacher (Paket-Proxy) installieren. Sie sparen nicht nur Bandbreite, sondern beschleunigen auch die Installation (da Pakete in Ihrem lokalen Netzwerk zwischengespeichert werden).
1
hoipolloi

Zu einem früheren Zeitpunkt hatten wir alles (und ich meine ALLES) in SCM (klarer Fall dann SVN). Wenn ein neuer Entwickler die Möglichkeit hat, ClearCase | SVN zu installieren, wurde das Repository gesaugt. Dies behandelt auch den Fall, wenn Sie ein bestimmtes lib/tool aktualisieren müssen, da die Entwicklungsteams nur ihre Umgebung aktualisieren können.

Wir haben zwei Repos dafür benutzt, also lebten Code und tools/config an verschiedenen Orten.

1
Mike Reedell

Wenn Sie OSX verwenden und mit Rails arbeiten. Ich würde entweder vorschlagen: 

1
Neil

Es gibt 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 minimaler Konfiguration.

1
tehvan

Ich kann Blueprint von DevStructure wärmstens empfehlen. Es ist Open Source und Ihr Anwendungsfall ist eigentlich der genaue Grund, warum wir die Software ursprünglich geschrieben haben. Unsere Ziele haben sich etwas verändert, aber es ist immer noch das perfekte Werkzeug für das, was Sie beschreiben. Kurz gesagt, Sie können wiederverwendbare Serverkonfigurationen erstellen - ein einfaches Konfigurationsmanagement. Ich hoffe das hilft!

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

1
Matt Tanase

Testen Sie DevScript unter http://nsnihalsahu.github.io/devscript . Sein Befehl lautet beispielsweise devscript lamp oder devscript laravel oder devscript Django. In wenigen Minuten, abhängig von der Geschwindigkeit Ihrer Internetverbindung

0
Nihal Sahu

Wenn Sie Maschinen in einer Standardkonfiguration verwenden, können Sie ein Image der Festplatte mit einer neuen, perfekt konfigurierten Installation erstellen. 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 verwenden, sobald ein konfiguriertes Betriebssystem in Ihr gewünschtes Setup umgewandelt wurde.

0
Alex Martelli

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 firmenspezifische Software erstellen, ein Repository erstellen (möglicherweise nur im lokalen Netzwerk verfügbar) und dann Ihre Einrichtung auf ein einziges reduzieren Bash-Skript, das das Company-Repo zu /etc/apt/sources.list (debian/ubuntu) hinzufügt und dann einen Befehl wie


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

sie könnten buildbot verwenden, um reguläre Builds für Unternehmenspakete zu automatisieren, die sich häufig ändern.

0
si28719e