2016-05-19 6 views
3

Ich verwende derzeit docker + travis CI, um meine App zu testen/zu implementieren. Dies funktioniert lokal sehr gut, da ich Datenvolumes für Dinge wie Knotenmodule usw. habe und die Layer des Andockers Caching bereitstellen, um Builds zu beschleunigen.Wie kann ich CI-Bauzeiten bei der Verwendung von docker beschleunigen?

Wenn ich jedoch den Code zu travis drücke, muss er alles von Grund auf neu aufbauen und installieren und es dauert ewig! Travis unterstützt das Zwischenspeichern von Docker-Layern atm nicht. Gibt es eine andere Möglichkeit, meine Builds zu beschleunigen, oder ein anderes ähnliches Tool, das das Zwischenspeichern von Docker-Ebenen ermöglicht?

Antwort

2

Sie könnten untersuchen, wie i3wm ein ähnliches Problem gelöst hat.

Der Hauptentwickler hat auf die design behind his Travis CI workflow geschrieben. Unter Angabe der relevanten Teil:

Die Grundidee eines Docker Container auf Debian Tests basieren zu bauen, ist und dann alle build/Testbefehle innerhalb dieses Behälters führen. Unsere Dockerfile installiert Compiler, Formatierer und andere Entwicklungstools zuerst, dann alle für i3 installiert auf dem debian/control dateibasierte Abhängigkeiten bauen, so dass wir nicht duplizieren müssen Abhängigkeiten für Travis bauen und für Debian.

Dies löst das unmittelbare Problem schön, aber zu einem erheblichen Kosten kommt: ein Docker Behälterbau fügt ziemlich viel Wanduhr Zeit zu einem Travis laufen, und wir wollen, dass unsere Mitwirkenden schnelles Feedback geben. Die Lösung für lange Build-Zeiten ist Caching: wir können einfach den Docker-Container auf die Docker Hub hochladen und nachfolgende Builds verwenden die zwischengespeicherte Version.

Wir haben uns entschieden, den Behälter für einen Monat zu cachen oder bis Eingaben an die Build-Umgebung (zur Zeit der Dockerfile und debian/control) ändern. Technisch wird dies durch ein kleines Shell-Skript namens ha.sh (get es? Hash!) Implementiert, die den SHA-256-Hash der Eingabedateien druckt. Dieser Hash, der an den aktuellen Monat angehängt wird, verwenden wir als Tag für den Docker-Container, z. B. . 2016-03-3d453fe1.

Sehen Sie unsere .travis.yml für, wie man alles zusammen steckt.