Wir möchten einen Continuous Integration (CI) -Dienst für unser Projekt einrichten. Dieser CI-Service sollte alle Aspekte des Projektlebens einschließlich der Bereitstellung steuern.
Das heißt, wir möchten, dass ein CI-Agent bei jeder Iteration ein sauberes System (insbesondere Ubuntu Server) erstellt, unser Projekt dort bereitstellt und Tests ausführt.
Wir würden den CI-Service wahrscheinlich von Grund auf selbst schreiben, da unser Ökosystem eher ungewöhnlich ist. Die Frage ist: Wie kann ein sauberes Schiefersystem für jede CI-Iteration effektiv bereitgestellt werden?
Bei der Projektbereitstellung werden einige Debian-Pakete installiert, mehrere Nginx-Sites konfiguriert und einige Pakete systemweit in einem implementierungssprachenspezifischen Paketmanager (LuaRocks) installiert. Nichts aufdringlicheres als das (glaube ich). Daher ist es wichtiger, schnell einen sauberen Slate einrichten zu können (innerhalb einer Minute auf moderner Hardware, schneller - besser), als absolute Isolation und Sauberkeit zu gewährleisten.
Ich sehe zwei Möglichkeiten, wie wir das tun können, was wir brauchen:
- Entweder ein Gefängnis errichten (wie lxc vielleicht).
- Oder installieren Sie eine virtuelle Maschine, die Snapshots erstellen und verwenden kann.
Aber zu diesem Zeitpunkt habe ich nicht genügend Informationen, um mich zu entscheiden.
Was würden Sie raten? Irgendwelche anderen Optionen? Irgendwelche spezifischen Werkzeugnamen?
Hinweis: Der CI-Dienst wird in einem Citrix XenServer-Gast ausgeführt. Bezahlte Lösungen sind in Ordnung, wenn die Preise angemessen sind. (Normalerweise sind sie in diesem Bereich nicht sinnvoll.) Remote-CI-Lösungen sind nicht in Ordnung.
quelle
Schau dir Jenkins an . Es verfügt über Plugins, mit denen Sie Builds in virtuellen Maschinen in VMWare oder VirtualBox oder in der Amazon / a Eucalyptus-Cloud ausführen können . Für virtuelle Maschinen, die in der Cloud ausgeführt werden, können Sie ein Init-Skript angeben, in dem Sie Schritte wie die Installation von Paketen ausführen können.
quelle
Ich würde die VM-Infrastruktur verwenden und eine Basisvorlage erstellen oder die Cloud wie von @LarsKotthoff vorgeschlagen verwenden. Es ist einfach, sie schnell zu drehen, und Sie können sicher sein, wo Sie angefangen haben.
Letztendlich benötigen Sie jedoch etwas außerhalb dieser VM, um die Vorgänge zu koordinieren (Richten Sie den Computer ein und starten Sie den gewünschten Prozess auf dem Computer). Ich würde Jenkins auf seine Fähigkeit hin untersuchen, die Ausgabe von Skripten für eine spätere Überprüfung zu erfassen.
Obwohl Jenkins als CI-Server gestartet wurde, verwenden zahlreiche Organisationen, mit denen ich zusammengearbeitet habe, ihn jetzt für viel mehr als das. Es ist wirklich ein Tool, um Dinge (manuell oder geplant) zu starten und Ergebnisse zu erfassen und zu überprüfen, was wie erwartet passiert ist. Und es ist sehr flexibel.
quelle
Jenkins wurde von einigen erwähnt. Sie können mit Skripten von Grund auf arbeiten, aber Jenkins bietet Ihnen die gleiche Flexibilität mit weniger Aufwand beim Zusammenstellen.
Hier bieten sich Images für virtuelle Maschinen an. Sie können Ihr sauberes Image einrichten und auf jedem Computer eine Abzweigung davon starten lassen. Das Originalbild wird nie geändert, aber Ihre Tests werden den Unterschied nicht erkennen. Sie sollten auf jeden Fall in der Lage sein, ein Bootstrap-Image in einer Minute zum Laufen zu bringen.
Wenn Sie mehrere Maschinen gleichzeitig betreiben möchten , schauen Sie sich Nimbula an (ich bin schamlos; ich arbeite für sie). Für kleinere Bereitstellungen ist es kostenlos und ermöglicht es Ihnen, Ihre eigene private Cloud zum Testen zusammenzustellen ... oder für alles andere. Zwischen Jenkins und einer Orchestrierungsdatei können Sie Hostserver, Testclients und alles andere hochfahren, um automatisch den gesamten Testcode ohne Interaktion auszuführen.
quelle