如何在声明性 Jenkins 管道中使用 Docker 的 --cache-from 构建标志?

Mri*_*lla 6 jenkins docker docker-build jenkins-pipeline

我使用声明性 Jenkinsfile 在 Docker 容器内运行某些阶段。该过程工作正常,但构建时间通常非常慢,因为我们的 CI 有相当多的从属设备,如果构建发生在没有层缓存的从属设备上,则整个构建需要一段时间。

我读到,如果--cache-from指定了标志,Docker 可以加快构建速度。如何指定缓存来源标志以及外部注册表的 URL 和凭据?

pipeline {

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

  stages {
    stage('Prepare environment') {
      steps {
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 3

管道语法确实授权附加参数

docker build ...您可以使用选项将其他参数传递给命令additionalBuildArgs,例如代理

{ dockerfile { additionalBuildArgs '--build-arg foo=bar' } }
Run Code Online (Sandbox Code Playgroud)

cache-from请参考可能位于专用外部注册表中并具有自己的凭据的映像。
也许您可以在该注册表中设置一个仅负责的第一步docker login


另一种方法完全是为该特定构建重用相同的节点。
请参阅“通过每阶段 Docker 代理重用节点/工作区

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"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那么任何人docker build都会从当前的本地图像缓存中受益。

  • 事实上,使用本地图像缓存并重用同一节点可能是最简单的解决方案。不过,如果您需要在不同的节点中运行构建,除了拉取和使用“--cache-from”之外,我不知道还有其他解决方案,即使[有很多警告](https://stackoverflow. com/a/56024061/149872)。 (2认同)