#docker #jenkins
Вопрос:
Я довольно новичок в декларативном конвейере Дженкинса. В файле Дженкинса я хочу проверить, есть ли на компьютере конкретный образ докера или нет. Если изображение уже есть, оно просто удаляет старое, а затем создает новое, а если нет, то просто создает новое. Как я могу достичь этой цели с помощью декларативного конвейера?
Очень признателен, если вы хотите помочь
Ответ №1:
Вы можете удалить изображение с помощью sh "docker rmi -f <ImageID>"
команды.
И чтобы найти идентификатор изображения, вы можете использовать -qf
опцию docker для отображения идентификаторов изображений.
Пример ссылки, как показано ниже:
stage('Remove old Image') {
steps {
script {
def imageName = "<Your image Name>"
env.imageName = "${imageName}"
def oldImageID = sh(
script: 'docker images -qf reference=${imageName}:${imageTag}',
returnStdout: true
)
echo "Image Name: " "${imageName}"
echo "Old Image: ${oldImageID}"
if ( "${oldImageID}" != '' ) {
echo "Deleting image id: ${oldImageID}..."
sh "docker rmi -f ${oldImageID}"
} else {
echo "No image to delete..."
}
}
}
}
Для получения информации о параметрах изображений docker посетите : https://docs.docker.com/engine/reference/commandline/images/
Ответ №2:
Как создание образа, так и его извлечение из реестра обходятся довольно недорого, если он уже есть у вас локально. Если вы создаете образ, кэширование слоев Docker означает, что Docker просканирует файл Dockerfile и быстро сделает вывод, что в нем уже есть окончательное изображение; если вы извлекаете его из реестра, Docker свяжется с реестром, получит список слоев (небольшой) и определит, что они все уже есть.
Это означает, что можно безоговорочно создавать/извлекать образ в вашей системе CI. Если нет никакой работы, которую нужно сделать, это произойдет быстро.
(И наоборот, обратите внимание, что некоторые образы Docker на самом деле обновляются довольно регулярно; например, ubuntu
базовый образ переиздается еженедельно или ежемесячно с обновленными исправлениями безопасности. Таким образом, есть некоторая выгода в том, чтобы всегда извлекать базовый образ в вашей системе CI, поэтому вы обязательно получите эти обновления.)