2017-10-04 3 views
1

Ich verwende eine deklarative Jenkins-Datei, um einige Stufen in einem Docker-Container auszuführen. Der Prozess funktioniert in Ordnung, aber die Build-Zeiten sind oft sehr langsam, da unser CI ziemlich viele Slaves hat und wenn der Build auf einem Slave ohne den Layer-Cache stattfindet, dauert der gesamte Build eine Weile.Wie verwende ich Docker's --cache-from Build-Flag in einer deklarativen Jenkins-Pipeline?

Ich habe gelesen, dass Docker Builds beschleunigen kann, wenn ein --cache-from Flag angegeben ist. Wie gebe ich das Cache-from-Flag und die URL und Anmeldeinformationen der externen Registrierung an?

pipeline { 

    agent { dockerfile true } 
    environment { 
    REPO = credentials('supersecret') 
    } 

    stages { 
    stage('Prepare environment') { 
     steps { 

Antwort

1

The pipeline syntax tun zusätzliche Parameter genehmigen

Sie zusätzliche Argumente an die docker build ... Befehl mit der Option additionalBuildArgs passieren kann, wie Agent

{ dockerfile { additionalBuildArgs '--build-arg foo=bar' } } 

Aber cache-from auf ein Bild beziehen, die möglicherweise in einer dedizierten externen Registrierung mit eigenen Anmeldeinformationen.
Vielleicht können Sie einen ersten Schritt nur für docker login in dieser Registrierung einrichten.


Ein anderer Ansatz wäre, denselben Knoten für diesen spezifischen Build wiederzuverwenden.
Siehe "Reusing node/workspace with per-stage Docker agents"

pipeline { 
    agent { 
    label 'whatever' 
    } 
    stages { 
    stage('build') { 
     steps { 
     sh "./build-artifact.sh" 
     } 
    } 
    stage('test in docker') { 
     agent { 
     docker { 
      image 'ubuntu:16.04' 
      reuseNode true 
     } 
     } 
     steps { 
     sh "./run-tests-in-docker.sh" 
     } 
    } 
    } 
} 

Dann kann jede docker build würde aus dem aktuellen lokalen Bild Cache profitieren.

Verwandte Themen