TL; DR
Это зависит от того, какой демон Docker использует ваш агент сборки.Каждый демон-докер имеет свой собственный кэш.
Более подробное объяснение
Вы используете какой-то плагин (docker-workflow
?), Который предоставляет docker.build()
шаг для вашего трубопровода.По умолчанию эта функция пытается использовать демон docker на локальном хосте вашего агента (обычно пытается использовать сокет /var/run/docker.sock
).Вы также можете настроить внутри конвейера, какой демон docker использовать с блоком docker.withServer() {}
.
Демон хранит / кэширует ваши слои, поэтому, пока вы используете один и тот же демон в сборках, все они также совместно используют общий кеш.
Если вы распространяете свои сборки по нескольким агентам, и каждый агент использует свой собственный демон docker localhost, то они не разделяют общий кеш.
В официальной документации это объясняетсяболее подробно.Еще один прием, о котором они упоминают, - это совместное использование локальных томов в агенте сборки с вашими сборками образа докера (раздел Caching data for containers
).Например, вы можете монтировать том с узлами в последовательные сборки образа докера.Таким образом, даже если вы очистите свой кеш докера, вы не будете повторно загружать все узлы в каждой сборке.
Суть в том, что Дженкинс автоматически не кеширует для вас.Кэширование входит в сферу инструментов (ы) сборки, которые вы используете.Вы должны позаботиться о том, чтобы должным образом включить это в потребности вашей среды CI.Но, конечно, это возможно.
Небольшое примечание для сайта: неплохо было бы иметь чистый кэш сборки докера в ваших сборках CI.В прошлом у нас были проблемы со старыми кешами сборки докеров, которые искажали наши образы.Однако, если у вас очень длинная сборка, очистка кэша может не подойти - по крайней мере, не после каждой сборки.