Как извлечь образ Docker из одного частного реестра и перенести его во второй другой частный реестр в конвейере Jenkins - PullRequest
0 голосов
/ 12 февраля 2019

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

Обратите внимание, яНасколько я знаю, я использую синтаксис конвейерного сценария, поскольку декларативный синтаксис не поддерживает push / pull или пользовательские реестры.Я также не знаком с синтаксисом Groovy.

Вот что у меня есть для моего Jenkinsfile:

node {
    checkout scm

    docker.withRegistry('https://private-registry-1', 'credentials-1') {
        def image = docker.image('my-image:tag')
        image.pull()

        docker.withRegistry('https://private-registry-2', 'credentials-2') {
            image.push()
        }
    }
}

Я поместил второй метод withRegistry () в первыйчтобы я мог использовать определенную переменную «image».

Я успешно подключился к первому реестру и вытащил последнее изображение.Из вывода консоли Jenkins:

Login Succeeded
[Pipeline] {
[Pipeline] sh
+ docker pull private-registry-1/my-image:tag
tag: Pulling from my-image
Digest: sha256:XXXXX
Status: Image is up to date for private-registry-1/my-image:tag

Однако вот соответствующий фрагмент ошибки после подключения ко второму реестру:

...
Login Succeeded
[Pipeline] {
[Pipeline] sh
+ docker tag my-image:tag private-registry-2/my-image:tag
Error response from daemon: No such image: my-image:tag
...

Я использую контейнер Jenkins в моей локальной Windowsмашина.Он подключен к Docker для Windows через мой терминал Ubuntu (Подсистема Windows для Linux).

1 Ответ

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

Решением было пометить изображение перед его нажатием, окончательный код:

node {
    checkout scm

    stage 'Pull latest image from private-registry-1'

    def image
    docker.withRegistry('https://private-registry-1', 'credentials-1') {
        image = docker.image('my-image:tag')
        image.pull()
    }

    stage 'Push image to private-registry-2'

    // SOLUTION START
    sh 'docker tag private-registry-1/my-image:tag private-registry-2/my-image:tag'
    image = docker.image('private-registry-2/my-image:tag')
    // SOLUTION END

    docker.withRegistry('https://private-registry-2', 'credentials-2') {
        image.push()
    }
}

Мне не нравится, как пометка выполняется вручную через "sh", но я не смог найти способсделать это через встроенный синтаксис Docker.Мне также понадобится параметризовать имя изображения и тег (my-image: tag) для будущего использования.

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