2016-11-10 8 views
1

Ich renne offizielle Jenkins Container auf Docker. Ich muss Docker-Bild als Post-Aktion des erfolgreichen Builds erstellen, aber Jenkins-Container hat keine Docker-Binärdatei.docker bauen in offiziellen jenkins container

Ich sehe Paare Optionen, erstens als Ableiten meines eigenen Jenkins Container vom offiziellen Bild mit Docker binär verfügbar. Die zweite Option ist die Verwendung eines dedizierten Jenkins-Slaves mit Andockfenster und anderer benötigter Laufzeit. Die dritte Option wäre, den Jenkins-Server mit Ansible zu versehen. Ich würde gerne alles auf Container laufen lassen, da es sauber, einfach und leicht wiederholbar ist.

Wie haben Sie dieses Problem gelöst? Was ist die bessere Lösung auf lange Sicht und warum? Meine höchste Priorität besteht darin, die gesamte CI-Infrastruktur mit einem einzigen Kommando bereitstellen, konfigurieren und booten zu können. Außerdem wird der integrierte Docker-Container in die Registrierung usw. verschoben, sodass die Konnektivität zwischen den Komponenten bei minimaler Komplexität oder manueller Konfiguration optimal sein sollte.

Antwort

3

Docker in einem Container installieren ist keine gute Idee.

related article

auch immer Sie den Docker Daemon erreichen können, die durch die Montage des Docker-Buchse an Ihrem Host ausgeführt werden. Es sollte für Testzwecke gut sein, aber nicht so im Produktionsmodus laufen, da es Sicherheitsproblem schafft.

related article

Sie können sicherlich eine sauberere Lösung die Verwaltung Ihrer Bereitstellung finden/Build-Prozess direkt von Ihrem Gastgeber den Exit-Status Ihres Jenkins Container beobachten.

+0

https://hub.docker.com/r/axltxl/jenkins-dood/ – user2363318

0

Wir haben jetzt ein ähnliches Setup mit GoCD, wo GoCD-Agenten in Docker-Containern ausgeführt werden und Bilder bei erfolgreicher Pipeline erstellen müssen.

tl; dr Noch ein hacky Weg, aber das ist die beste Option verhalte: Verwenden TCP-Verbindung aus dem Behälter zu dem Docker Host der Jenkins läuft. Beachten Sie die Sicherheitsimplikationen, wie @Raphayol erwähnt hat.

Hier ist, was wir versucht:

1) Run Docker innen Docker

Keine gute Idee. Ergebnisse in verschiedenen hängenden Situationen, in denen die IO-Subsysteme nur bellen und ein Neustart erforderlich ist.

2) Baue auf Schwarm

Swarm-Cluster oder jeder anderen Andockfensters Cluster sollen Lauf Behälter nicht, sie zu bauen. Alte Container werden als letzte zurückgeschoben, da Build und Push nicht garantiert auf demselben Knoten ausgeführt werden.

3) Dedicated Build Host

Obwohl dies funktioniert, schlägt den Zweck der Worker-Knoten und automatische Skalierung wird schwierig.

4) Berg Docker Buchse

Sortierung der Werke, sondern auf schwere Last es zufällig IO Schlösser und Neustarten Docker Daemon erzeugt notwendig

5) über TCP Verbindung zurück

Diese Option funktioniert für Monate jetzt und obwohl es keine klare lösung ist, wenn deine jenkins build server gut isoliert sind, kannst du damit leben.

[[email protected] ~]# docker ps 
CONTAINER ID  IMAGE        COMMAND    CREATED    STATUS    PORTS        NAMES 
e3630d84909e  registry.backbase.com/gocd-agent "/sbin/my_init"  2 minutes ago  Up 2 minutes  0.0.0.0:9040-9045->9040-9045/tcp docker_agent_1 
[[email protected] ~]# docker exec -it e3 env|grep DOCKER 
DOCKER_TLS_VERIFY=yes 
DOCKER_HOST=tcp://10.10.10.10:2376 
DOCKER_CERT_PATH=/var/go/docker-certs