Wie kombiniere ich Vagrant mit Jenkins für die perfekte kontinuierliche Integrationsumgebung?

85

Sie haben ein Projekt, für das einige SW-Anforderungen ausgeführt werden müssen (z. B. eine bestimmte Version von Apache, eine Version von PHP, eine Instanz einer MySQL-Datenbank und einige andere Softwareteile).

Sie haben Vagrant bereits entdeckt , sodass Ihre virtuelle Umgebung vollständig eingerichtet ist. Sie können Boxen aus Ihren Konfigurationsdateien und Kochbüchern erstellen.

Sie haben auch die Vorteile eines Continuous Integration-Systems wie Jenkins verstanden .

Jetzt möchten Sie diese beiden Welten (Vagrant und Jenkins) kombinieren, um die perfekte kontinuierliche Integrationsumgebung zu erhalten. Um genauer zu sein, möchten Sie die für Ihr Projekt erforderliche Software nicht auf dem Computer installieren, auf dem Jenkins ausgeführt wird, aber Sie möchten die von Vagrant bereitgestellte virtuelle Umgebung verwenden, um Ihr Projekt regelmäßig darauf aufzubauen. Die CI-Software (Jenkins) erstellt die Vagrant-Box für Sie und erstellt und testet Ihr Projekt darüber.

Wie würden Sie Ihre Umgebung einrichten, um dies zu erreichen?

Roberto Aloi
quelle
4
Darüber hinaus ist Ihr Jenkins-Setup eine Vagrant-Box, sodass Sie diese CI-Umgebung auf mehreren Plattformen ausführen können, da zwischen ihnen viele Unterschiede bestehen.
Stephan Eggermont
1
Haben Sie eine solche Umgebung erstellt? Die Kombination von Docker und Jenkins ist bereits bekannt, reicht jedoch für Windows-Umgebungen nicht aus. In diesem Fall ist Vagrant + Jenkins die einzig gute Option, IMO. Es sind einige Aspekte zu berücksichtigen, zum Beispiel brauchen wir wirklich Slaves und in welchen Kontexten oder könnten wir einen einzelnen Server verwenden, um bei Bedarf eine vagabundierende Build-Umgebung pro Projekt zu erstellen (in vielen Unternehmen werden nur wenige Projekte ständig erstellt, die Mehrheit wird selten erstellt). oder sollten wir dies zusätzlich zum Deduplizierungssystem verwenden, um den Speicherbedarf zu verringern.
Majkinetor

Antworten:

35

Es ist eine gute Lösung für das Build-System, mein Vorschlag:

  1. Ihre aktuellen Jenkins funktionieren als Master-CI (wahrscheinlich von Benutzer Jenkins gestartet).
  2. Erstellen Sie einen anderen Benutzer auf demselben Computer oder einem anderen Computer, um als Jenkins-Slave-Modus zu arbeiten
    • Jenkins Slave kann vom Jenkins Master aufgerufen werden und es kann ein anderer Benutzer wie Vagrant verwendet werden, der über die Berechtigung und Umgebung für Vagrant verfügt. Daher wird der ursprüngliche Jenkins Master Server nicht gestört
    • Erstellen Sie Ihre Basis-Vagabundbox, und verwenden Sie sie erneut, um die Bereitstellung zu beschleunigen
  3. Die meisten Installationsinformationen (Pakete) können von einer Puppe (oder einem Koch) verwaltet und in Ihre VM-Box geladen werden.

Wahrscheinlich können Sie sich veewee ansehen , wodurch im laufenden Betrieb eine Vagabundkiste entstehen kann.

Hier ist das Make CI mit Jenkins CI und Vagrant für meine Richtlinie für diesen Vorschlag.

Larry Cai
quelle
1
Ihr Link ist leider defekt
langlauf.io
2
Falls jemand an dem defekten Link interessiert ist, hier ist eine Kopie von Make CI einfacher mit Jenkins CI und Vagrant
Gilberto Treviño
12

Sie können das Vagrant Plugin für Jenkins ausprobieren, das derzeit Jenkins CD 1.532.3 unterstützt

Eine Demo dieses Plugins finden Sie unter http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html

Christophe Furmaniak
quelle
7
Dieses Plugin unterstützt Jenkins über 1.490 nicht, das ist also eine große Einschränkung :-(
Kenyee
unterstützt nicht auch das Laufen von Vagabunden auf Sklaven :(
Christophe Furmaniak
1
Ja, aber dann müssen Sie den gesamten Lebenszyklus der VM selbst verwalten (erstellen, zerstören oder nicht am Ende des Jobs, ...). Die Idee hinter dem Plugin ist, dass das Plugin das für Sie erledigt und Sie sich dann auf Ihren Hauptzweck konzentrieren können: Verwenden Sie eine VM als isolierten Container.
Christophe Furmaniak
2
Das erwähnte Plugin hat nervige Probleme, die immer noch nicht behoben sind ( issue.jenkins-ci.org/browse/JENKINS-26326 ), und die Entwicklung wurde vor einem Jahr gestoppt. Würde nicht empfehlen.
Ross Ivantsiv
1
Das Ausführen der Vagrant-Instanz bei Bedarf, um den Build auszuführen, klingt wie das Richtige. Wenn dieses Plugin immer noch nicht funktioniert?
Atifm
1

Persönlich würde ich vorschlagen, Hashicorp Packer zu verwenden, um Ihre Vagrant-Boxen für Entwickler zu erstellen, und dann auch ein Docker- oder AWS- oder OpenStack-Image auszugeben, das Sie auf Ihrem CI-System ausführen können. Vagrant ist ein großartiges Tool, aber der Overhead von VMs kann für ein CI-System etwas hoch sein, um sie ständig auf und ab zu drehen, insbesondere wenn Sie wirklich schnelles Feedback wünschen.

Bei einem früheren Client haben wir die Vagrant-Maschinen im Grunde einmal mit dem System gebootet und dann Docker / virtualenv-Builds innerhalb dieser VMs ausgeführt und sie regelmäßig zerstört, wenn ein größeres Upgrade oder ein Problem mit der Umgebung aufgetreten ist, die sich nicht richtig verhält.

https://www.packer.io/docs/builders/openstack.html

dragon788
quelle
Wenn ich fragen darf, haben Sie Jenkins als separaten Benutzer ausgeführt? Wenn ja, wie haben Sie es geschafft, Zugang zu Vagabunden zu gewähren? Danke
Jaswanth Manigundan
Solange Vagrant normal installiert ist, wird es auf den Systempfad gesetzt. Die Boxen selbst werden normalerweise in das Home-Verzeichnis des aktuellen Benutzers geladen, aber Sie können das vagabundierende Home mit einer Umgebungsvariablen überschreiben. Wir haben all dies kombiniert und die Box mit einer bestimmten Version zum Teil des Erstellungsprozesses gemacht, sodass sie einmal zwischengespeichert und dann wiederverwendet wurde.
Drache 788