Кеширует ли Jenkins зависимости и слои Docker при сборке? - PullRequest
0 голосов
/ 06 февраля 2019

Я разрабатываю приложение React, которое будет помещено в образ Docker.Я хотел бы автоматизировать этап построения изображения с помощью Jenkins.

Это мой текущий Jenkinsfile ...

pipeline {

    agent any

    stages {
        stage('Build') {
            steps {
                script {
                    def commitHash = GIT_COMMIT.take(7)
                    echo 'Building Docker image for commit hash: ' + commitHash
                    def customImage = docker.build("myImage")
                }
            }
        }
    }

}

Само изображение успешно создано.Теперь мне интересно: 1. Будет ли Jenkins загружать все зависимости в моем package.json с каждой сборкой?2. Будет ли Jenkins загружать все слои с каждой сборкой?

Или Дженкинс заметит, что зависимости и / или слои изображений уже существуют?

1 Ответ

0 голосов
/ 06 февраля 2019

TL; DR

Это зависит от того, какой демон Docker использует ваш агент сборки.Каждый демон-докер имеет свой собственный кэш.


Более подробное объяснение

Вы используете какой-то плагин (docker-workflow?), Который предоставляет docker.build()шаг для вашего трубопровода.По умолчанию эта функция пытается использовать демон docker на локальном хосте вашего агента (обычно пытается использовать сокет /var/run/docker.sock).Вы также можете настроить внутри конвейера, какой демон docker использовать с блоком docker.withServer() {}.

Демон хранит / кэширует ваши слои, поэтому, пока вы используете один и тот же демон в сборках, все они также совместно используют общий кеш.

Если вы распространяете свои сборки по нескольким агентам, и каждый агент использует свой собственный демон docker localhost, то они не разделяют общий кеш.

В официальной документации это объясняетсяболее подробно.Еще один прием, о котором они упоминают, - это совместное использование локальных томов в агенте сборки с вашими сборками образа докера (раздел Caching data for containers).Например, вы можете монтировать том с узлами в последовательные сборки образа докера.Таким образом, даже если вы очистите свой кеш докера, вы не будете повторно загружать все узлы в каждой сборке.

Суть в том, что Дженкинс автоматически не кеширует для вас.Кэширование входит в сферу инструментов (ы) сборки, которые вы используете.Вы должны позаботиться о том, чтобы должным образом включить это в потребности вашей среды CI.Но, конечно, это возможно.

Небольшое примечание для сайта: неплохо было бы иметь чистый кэш сборки докера в ваших сборках CI.В прошлом у нас были проблемы со старыми кешами сборки докеров, которые искажали наши образы.Однако, если у вас очень длинная сборка, очистка кэша может не подойти - по крайней мере, не после каждой сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...