если условие для проверки изображения докера в файле Дженкинса

#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, поэтому вы обязательно получите эти обновления.)