EIN Build-Pipelineerfordert häufig den Zugriff auf Ressourcen von Drittanbietern, abgesehen vom Quellcode der Artefakte, die erstellt werden sollen. Jede dieser Ressourcen von Drittanbietern führt einen Risikofaktor in Builds ein, zum Beispiel:
Verteilungsrepositorys sind vorübergehend nicht verfügbar, daher schlägt die Installation von Verteilungspaketen vorübergehend fehl.
Distributions-Repositorys sind permanent nicht verfügbar, genauso und schlechter als zuvor.
Einige NPM-Pakete für freie Software existieren nicht mehr, weil der Autor diese Rücknahme zurückgefordert hat.
Einige Quelldateien oder binäre Ad-hoc-Pakete für Tools von Drittanbietern sind nicht mehr verfügbar.
Diese Liste könnte ad libitum erweitert werden, und obwohl es viel unterhaltsamer ist, die verschiedenen Gründe zu untersuchen, die dazu führen, dass Ressourcen von Drittanbietern verschwinden, hat dies für uns zunächst eine katastrophale Konsequenz: Die Build-Pipeline ist kaputt.
Was ist der beste Weg, um die beiden folgenden Fälle beim Erstellen von Docker- Bildern abzudecken :
- Zwischenspeichern von Dateien, die mit einem Curl oder Wget heruntergeladen wurden .
- Zwischenspeichern von Debian-Paketen.
Es gibt mehrere plausible Strategien, die hier berücksichtigt werden können. Verwenden Sie beispielsweise einen Proxy und konfigurieren Sie das Build-System so, dass alle seine Anforderungen über diesen Proxy weitergeleitet werden. Eine zweite, billige Möglichkeit wäre, Curl- Aufrufe zu verpacken , um die Ergebnisse in einem lokalen Cache zu speichern.
(In dieser Frage würde ich die Aufteilung des Caches auf mehrere Einheiten der Build-Pipeline als eine Frage von untergeordneter Bedeutung betrachten.)
quelle
Es sieht so aus, als ob es bei Ihrer Suche weniger um Caching als um Spiegelung geht. Da Ihre Anforderungen permanent nicht verfügbare Pakete behandeln müssen, müssen Sie die Pakete selbst in einem dauerhafteren als einem Cache speichern. In der Vergangenheit haben wir Pakete in dauerhaften, Cloud-basierten Geschäften wie S3 gespeichert. Es hindert Sie jedoch nichts daran, einen benutzerdefinierten Dateispeicher auf dem Build-Server einzurichten.
Genauer gesagt ist es wahrscheinlich am einfachsten, einen Proxy-Dienst einzurichten, der nach einer Ressource in Ihrem Dateispeicher (S3) sucht und das Paket zurückgibt, wenn es gefunden wird. Andernfalls würde es nur die Ressource vom Upstream anfordern, Ihren Dateispeicher füllen und das Paket zurückgeben.
quelle