Was sind Alternativen für die Verwendung von Docker in Docker (dind) für Jenkins-Slaves, die im Container ausgeführt werden?

7

Wenn Slave Jenkins mit in Container ausgeführt wird , was sind Alternativen oder „sicher“ (in Bezug auf Sicherheit) Implementierungen für Docker in Docker .

Architekturbeispiel:

  1. Jenkins Master läuft als Docker-Container
  2. Jenkins Sklave läuft als Docker Container
  3. Testaufgabe im Docker-Container ausgeführt

Einige bekannte Alternativen:

Klärung der Einschränkungen: Die Idee ist, Jenkins als Orchestrator und Docker für eine saubere Umgebung zu verwenden. Der Rest der Architektur kann sich ändern.

Rombob
quelle
2
Vielen Dank für die Frage, die Sie mir beigebracht haben Docker-in-docker- für alle anderen, die neu im Thema sind, lohnt es sich, Jérôme Petazzonis Beschreibung der Vor- und Nachteile von zu lesen .
Richard Slater
1
@RichardSlater Hängt davon ab, wie Workloads definiert sind (Jobs / Tag, Slaves / Master, CPU, Daten / Job), aber die Frage ist allgemeiner. Alle aufgeführten Sicherheits-, Schildkröten- und Leistungsmerkmale sind legitime Kandidaten, die vermieden werden sollten, sowie der Geruch von "Hackity Hack", der in "Jérôme Petazzonis Beschreibung der Vor- und Nachteile von ..." erwähnt wird
Rombob
1
Nein, es ist immer noch unklar, ob Ihre Architektur immer noch auf Jenkins Sklaven im Docker angewiesen ist oder nicht. Wie auch immer, Tricks für Ruby / Python / Java mit mehreren Versionen auf denselben Hosts (oder Docker-Image-FWIW) sind bekannt, die für NodeJS oder Go sind weniger "üblich" und weniger einfach einzurichten. Ich bin mir also nicht sicher, wie Sie offen sind und mit welchen nicht. Wenn es weiterhin geplant ist, Jenkins als Orchestrator und Docker für eine saubere Umgebung zu verwenden, gibt es einen Ort, an dem man antworten kann. Wenn sich die Slaves in einer Docker-Umgebung befinden müssen, ist alles ein hässlicher Hack, dem man den Testergebnissen nicht wirklich vertrauen kann.
Tensibai
1
@Tensibai, vielen Dank, dass Sie sich zur Klärung der Frage gewandt haben. Mein Ziel war es, allgemeiner zu bleiben, um mehr Raum für Kreativität bei den Antworten zu lassen, einschließlich der von Ihnen erwähnten Dinge. In bestimmten Fällen sind Tricks bekannt und werden verwendet. Docker bietet die Möglichkeit, eine Möglichkeit zur Implementierung für alle Arten von Workloads zu haben. Wenn möglich, versuchen Sie, sich darauf zu konzentrieren, diese stabil und sicher zu machen.
Rombob
1
@ Tensibai Vielen Dank für Ihr Feedback und die Klarstellung zur Frage hinzugefügt.
Rombob

Antworten:

5

Um zu vermeiden, dinddass ich mich darauf verlasse ( keine neuen Bilder aus einer Docker-Datei zu erstellen, was in Ordnung sein sollte), würde ich mich in Jenkins Kubernetes- Plugin umsehen .

Es muss offensichtlich einen Kubernetes-Cluster zum Leben erwecken, aber einen einmaligen Jenkins-Agenten zulassen, um den Test in einer sauberen, isolierten Umgebung auszuführen und ihn dann abzureißen. Die Wartungskosten des Kubernetes-Clusters sollten nicht höher sein als die Wartung Ihrer Jenkins-Slaves.

Der Bonuspunkt ist, dass Sie Ihre Slaves mit einer bestimmten Umgebung versionieren können und nicht für eine Mehrfachversion von Ruby / Java / Python optimieren müssen. Lassen Sie die Aufgabe die richtige "Umgebung" auswählen, indem Sie das zu verwendende Agenten-Image angeben und ein haben Bereit zum Testen der Umgebung ohne Vorab-Test.

Ich würde mich als Container-Scheduler an kurbenetes wenden, da die Konfiguration und Wartung relativ einfach ist.

Tensibai
quelle
Toller Ansatz, als alternative Mesos kann Schwarm verwendet werden, IMO Schwarm ist ein großartiger Kandidat nur wegen der relativ einfachen Wartung, kann aber mit Preis für Stabilität, zu frische Technologie kommen
Rombob
@rombob in der Tat, und Mesos ist ziemlich schwer zu warten und wahrscheinlich übertrieben für diesen Anwendungsfall. Ich habe mich gefragt, ob die Angabe dieses Vergleichs / Punktes in dieser Antwort sinnvoll wäre.
Tensibai
Vielleicht wäre ein Vergleich ein großartiger Kandidat für eine neue Frage
Rombob
@rombob Normalerweise verschwinden sie sehr schnell, besonders wenn sich der Schwarm in der aktiven Entwicklung befindet, würde fast jede Woche ein Update benötigt. Also würde ich es vermeiden, selbst ein Blog-Beitrag ist nicht wirklich klar auf der Frage nach einer ganzen Liste oder
Vor-
Wenn Sie das Jenkins Kubernetes-Plugin verwenden, wie wählen Sie dynamisch einen Container aus, der eingebaut werden soll. Ich verwende das Jenkins Kubernetes-Plugin, aber ich verwende immer noch dind, weil ich in Containern bauen möchte. Ich habe einen Sklavencontainer mit Dind darin, aber es muss einen besseren Weg geben.
David West