Wir haben einen Jenkins CI-Server, der unseren Code von Git abruft, erstellt, ein Docker-Image erstellt und ihn dann an einige Produktionsserver versendet.
Unser Projekt ist hauptsächlich in Python geschrieben, daher beinhaltet "Erstellen" das Ausführen
pip install -r requirements.txt
Das funktioniert gut, außer es ist etwas langsam. Es muss Pakete über das Netzwerk abrufen und für einige von ihnen C-Bibliotheken erstellen (und 'lxml' ist nicht klein!).
In der Entwicklung hatte ich Erfolg pip-acceldamit, diesen Prozess zu beschleunigen. Es hat die gleiche Oberfläche wie pip, speichert jedoch sowohl die Python-Downloads als auch den erstellten C-Code zwischen
pip-accel install -r requirements.txt
ist schnell.
Ich möchte dies für unsere Produktions-Builds tun, aber ich stoße auf einige Hindernisse.
Benötigt natürlich pip-accelein Verzeichnis, in dem der Cache gespeichert wird. Da unser CI-Server die Builds ausführt, ist dies der logische Ort, um ihn zu platzieren. Der pip installBefehl wird jedoch in einem neuen Docker-Container ausgeführt, sodass nicht nur auf ein gemeinsames Verzeichnis auf diesem Server zugegriffen werden kann.
Docker- "Volumes" scheinen für die gemeinsame Nutzung von Verzeichnissen mit Containern konzipiert zu sein, aber unser Build findet (überraschend überraschend) im Inneren statt docker buildund ermöglicht nur docker rundas Anhängen von Volumes. Sie können keine Volumes mit anhängen docker build.
Fehlt mir etwas? Wie kann ich docker buildeinen Cache-Ordner außerhalb des Containers, in dem ich mich befinde, ausführen und für meinen Host freigeben?