【问题标题】:How do I use Docker's --cache-from build flag in a declarative Jenkins pipeline?如何在声明性 Jenkins 管道中使用 Docker 的 --cache-from 构建标志?
【发布时间】:2018-03-16 05:42:46
【问题描述】:

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

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

pipeline {

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

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

【问题讨论】:

    标签: docker jenkins jenkins-pipeline docker-build


    【解决方案1】:

    The pipeline syntax 授权附加参数

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

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

    cache-from 指的是可能位于专用外部注册表中且具有自己的凭据的图像。
    也许您可以在该注册表中设置一个只负责docker login 的第一步。


    另一种完全的方法是为特定构建重用相同的节点。
    见“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"
          }
        }
      }
    }
    

    那么任何docker build 都将受益于当前的本地图像缓存。

    【讨论】:

    • 确实,使用本地图片缓存并重用同一个节点可能是最简单的解决方案。但是,如果您需要在不同的节点上运行构建,我不知道除了拉取和使用--cache-from 之外的其他解决方案,即使there are plenty of caveats 也是如此。
    猜你喜欢
    • 2017-12-03
    • 2023-03-07
    • 1970-01-01
    • 2017-07-16
    • 2018-01-24
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多