5

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

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

pipeline {

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

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

1 回答 1

2

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

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

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

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"
      }
    }
  }
}

然后任何docker build人都将从当前的本地图像缓存中受益。

于 2017-10-04T20:47:18.283 回答