Используя плагин док-станции конвейера Jenkins, как вытащить изображение и вставить в него новый тег? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть изображение уже в моем личном репо. Мне нужно вытащить это изображение, создать тег и отправить его в реестр.

Какой лучший способ сделать это с помощью Jenkins WithRegistry?

Вот мой фактический код:

        stage("Applying to docker repo") {
        steps {
            script {
              def imageNameLookup = configs.dockerRegistry.repo + "/"+repo.toLowerCase()+":"+params.versionToTag
              echo 'looking up '+ imageNameLookup
              docker.withRegistry('https://' + configs.dockerRegistry.url, configs.dockerRegistry.credentialsId) {

                try {
                  image = docker.image(repo.toLowerCase()+":"+params.versionToTag).pull()
                  image.tag("${deliveryTag}")
                  image.push()
                } catch (Exception e) {
                  echo ' catch 2 '+ e.getMessage()
                }
               }
            }
        }
    }

При запуске image.tag(), я получаю следующую ошибку:

bfc9288fe86d: Дайджест завершен: выгрузить: sha256: ee9b01eb62f2f21dcb3bf4af285702c8991d1789e659515fdfa2da2619f1d8b9 Статус: загруженный образ новой версии xxx: x1] echo catch 2 Невозможно вызвать метод tag () для нулевого объекта

РЕДАКТИРОВАТЬ: Мне удалось вытащить изображение, но когда я пытаюсь создать тег, я получаю новыйошибка: Нет такого изображения: последняя

Мне не нужно устанавливать тег последней, потому что я отмечаю другую версию.

              docker.withRegistry('https://' + configs.dockerRegistry.url, configs.dockerRegistry.credentialsId) {
                try {
                  docker.image(repo.toLowerCase()+":"+params.versionToTag).pull()
                  sh "docker tag ${repo.toLowerCase()} ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${deliveryTag}"
                  sh ""
                 )
                } catch (Exception e) {
                  echo ' catch 2 '+ e.getMessage()
                }

и мой новый журнал:

[Pipeline] sh
+ docker pull repodocker-xxxx.xxx.xx/myapi-api:1.19.0
1.19.0: Pulling from myapi-api
Digest: sha256:ee9b01eb62f2f21dcb3bf4af285702c8991d1789e659515fdfa2da2619f1d8b9
Status: Image is up to date for repodocker-xxxx.xxx.xx/myapi-api:1.19.0
[Pipeline] sh
+ docker tag myapi-api grdocker-xxxx.xx.xx:443/xx.xxx.xxx/myapi-api:testTag20
Error response from daemon: No such image: myapi-api:latest
[Pipeline] echo
 catch 2 script returned exit code 1

EDIT2 смог сделать это следующим образом:

        stage("Applying to docker repo") {
        steps {
            script {
                docker.withRegistry('https://' + configs.dockerRegistry.url, configs.dockerRegistry.credentialsId) {
                  docker.image(repo.toLowerCase()+":"+params.versionToTag).pull()
                  sh "docker tag ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${params.versionToTag} ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${deliveryTag}"
                  sh "docker push ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${deliveryTag}"
                }
            }
        }
    }

FINALРЕДАКТИРОВАТЬ Вот окончательное решение в Jenkins и плагин Docker, который не смог сделать все.

        stage("Applying to docker repo") {
        steps {
            script {
                  docker.withRegistry('https://' + configs.dockerRegistry.url, configs.dockerRegistry.credentialsId) {
                  docker.image(repo.toLowerCase()+":"+params.versionToTag).pull()
                  sh "docker tag ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${params.versionToTag} ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${deliveryTag}"
                  sh "docker push ${configs.dockerRegistry.url}/${repo.toLowerCase()}:${deliveryTag}"
                  docker.image(repo.toLowerCase()+":${deliveryTag}").pull()
                }
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Установили docker-engine и ваш сервер должен иметь доступ к реестру:

  • console docker login ip_registry:5000
  • stage:

stage('registry') {
            steps {
                sh "docker tag ${imageName} ${registryServer}/${imageName}:latest"
                sh "docker push ${registryServer}/${imageName}:latest"
            }
        }
0 голосов
/ 30 октября 2019

Попробуйте код ниже, чтобы вставить изображение с новым тегом:

try {
    image = docker.image(imageNameLookup+":"+params.versionToTag)
    image.pull()
    image.push("${deliveryTag}")
} catch (Exception e) {
    echo ' catch 2 '+ e.getMessage()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...