Как мне использовать флаг сборки --cache-from Докера в декларативном конвейере Jenkins?

Я использую декларативный Jenkinsfile для запуска некоторых этапов внутри контейнера Docker. Процесс работает нормально, но время сборки часто очень медленное, так как наш CI имеет довольно много подчиненных, и если сборка происходит на ведомом устройстве без кэша слоя, вся сборка занимает некоторое время.

Я читал, что Docker может ускорить сборку, если --cache-from флаг указан. Как мне указать флаг кеша от и URL внешнего регистра и учетные данные?

pipeline {

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

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

1 ответ

Решение

Синтаксис конвейера авторизует дополнительные параметры

Вы можете передать дополнительные аргументы 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 выиграет от текущего локального кэша изображений.

Другие вопросы по тегам