Effektiver Weg, um ein „sauberes Schiefersystem“ für einen kontinuierlichen Integrationsservice zu gewährleisten

10

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.

Alexander Gladysh
quelle

Antworten:

5

Schauen Sie sich Chef / Vagrant an . Ich bin mir nicht sicher, ob es schnell genug sein wird, aber etwas, das ich untersuchen muss.

Nur für den Fall, dass Sie mit Chef nicht vertraut sind, handelt es sich um einen Server, der eine einfache codebasierte Bereitstellung von Servern ermöglicht. Ich würde empfehlen, einen Blick auf einen der Webcasts zu werfen. Django Chef Webcast

Vagrant-, Veewee-, Chef-Solo- und Messer-Solo-Sachen Ich denke, diese hier decken das meiste ab, was Sie tun möchten.

Vagrant-Blog-Beitrag Ein Blog-Beitrag, der eine schnelle Einrichtung eines Servers mit Vagrant zeigt.

Philip Tinney
quelle
Vielen Dank. Möchten Sie in Ihrer Antwort weitere Details angeben?
Alexander Gladysh
Ich habe es selbst nicht dafür verwendet, also kann ich nur ein paar Links posten, von denen ich denke, dass sie helfen sollten.
Philip Tinney
13

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.

Lars Kotthoff
quelle
Danke, aber Jenkins ist ein CI-Server und ich würde gerne wissen, wie man selbst einen bauen kann.
Alexander Gladysh
2
@AlexanderGladysh Warum willst du das Rad neu erfinden? Jenkins-Builds können alles ausführen, von Make-Dateien bis hin zu einfachen Shell-Skripten. Außerdem verfügt es über eine robuste Benutzeroberfläche, hervorragende Unterstützung und viele Plugins. Selbst wenn Ihr Build sehr kompliziert ist, muss es irgendwo ein Shell-Skript sein, das Jenkins ausführen kann
TheLQ
Selbst wenn Sie Jenkins nicht verwenden möchten, denke ich, dass etwas Cloud-basiertes der richtige Weg für Sie ist. Sie können ein Computer-Image anpassen, um die gewünschte Software bereitzustellen, und nur Konfiguration und Code zum Testen hinzufügen, wenn Sie die Instanz starten, um die Startzeit zu verkürzen.
Lars Kotthoff
Wie auch immer, Jenkins oder keine Jenkins, was kann man verwenden, um schnell Clean-Slate-OS-Snapshots zu erhalten? (Bitte hören Sie auf, Clouds von Drittanbietern zu erwähnen - dies muss auf unseren eigenen Servern ausgeführt werden.)
Alexander Gladysh
Führen Sie eine Eucalyptus / OpenStack / ... Cloud auf Ihren eigenen Servern aus?
Lars Kotthoff
2

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.

Tenacioustechie
quelle
Vielen Dank, aber ich möchte die Dinge direkt innerhalb der Xen VM-Instanz einrichten, nicht außerhalb - dies ist in meinem speziellen Fall viel einfacher zu organisieren. Ich werde mich mit Jenkins befassen, aber ich suche immer noch nach einer engeren Lösung.
Alexander Gladysh
Bitte erläutern Sie auch "Verwenden Sie die VM-Infrastruktur und erstellen Sie eine Basisvorlage".
Alexander Gladysh
2

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.

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.

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.

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.

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.

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.

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.

Jeff Ferland
quelle
Pfui. Vielleicht bin ich heute langsam, aber ich habe versucht, die Nimbula-Website zu durchsuchen, kann aber den Grund für das Marketing nicht erkennen. Möchten Sie auf einen vernünftigen Text verweisen, der beschreibt, wie ich das tun kann, was ich brauche? (
Dh eine Gastmaschinenvorlage
@AlexanderGladysh Es ist praktisch, wenn Sie viele Maschinen verwenden, um aus / viel CI-Arbeit zu bauen. Es ist nutzlos, wenn Sie nicht über genügend Arbeitslast verfügen, um einen Cluster von mindestens 3 Computern zu gewährleisten.
Jeff Ferland