Docker ретейг изображения для продвижения сборки - PullRequest
0 голосов
/ 29 февраля 2020

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

"docker tag" requires exactly 2 arguments.
See 'docker tag --help'.

Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Я вижу следующие в журналах

docker tag artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/dev:artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest

Код конвейера:

testImage = docker.image("artifactory.mycompany.com/docker-dev/appname/dev:latest")

testImage.pull()

testImage.push("artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest" )

Любая идея, что здесь не так ...

Редактировать # 1: Если я делаю после того, как я получаю другая ошибка.

testImage = docker.image("artifactory.mycompany.com/docker-dev/appname/dev:latest")

testImage.pull()

testImage.tag("artifactory.mycompany.com/docker-dev/appname/test:latest")

testImage.push( )

Ошибка:

Error parsing reference: "artifactory.mycompany.com/docker-dev/appnamee/dev:artifactory.mycompany.com/docker-dev/appname/test:latest" is not a valid repository/tag: invalid reference format

1 Ответ

0 голосов
/ 02 марта 2020

Кажется, что вы сталкиваетесь с некоторой путаницей в отношении того, что делает каждая команда docker и как добавить новые теги в существующий docker в вашей рабочей области.

В мире Jenkins, docker команды ведут себя так:

docker.image принимает один аргумент, составляя IMAGE_NAME: TAG

docker.tag с одним аргументом, и будет принимать TAG (эта команда не изменит 'IMAGE_NAME', она изменит только часть TAG)

docker.push принимает один необязательный аргумент, TAG, означающий pu sh уже существующего изображения с только другой тег (не с другим IMAGE_NAME)

В вашем конвейере вы пытаетесь изменить часть IMAGE_NAME идентификатора docker, поскольку ни одна из вышеперечисленных команд вам не поможет.

НОВОЕ РЕШЕНИЕ

Другой способ решения этой проблемы - внести изменение IMAGE_NAME через оболочку, а затем использовать плагины Jenkins для отображения и pu sh изображения

sh("docker tag ORIGINAL_IMAGE_NAME:ORIGINAL_TAG NEW_IMAGE_NAME:NEW_TAG")
newImage = docker.image("NEW_IMAGE_NAME:NEW_TAG")
# docker plugin should find the image on the localhost, so there is no need to pull it form the registry
newImage.push

в вашем коде, что-то вроде

sh ('docker tag artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest')
testImage2 = docker.image('artifactory.mycompany.com/docker-dev/appname/test:latest')

а затем pu sh каждое изображение независимо от другого

testImage.push()
testImage2.push()

НЕ РАБОТАЕТ

Вы можете попробовать указать 2 аргумента для docker.tag, например:

docker.tag (ORIGINAL_IMAGE_NAME:ORIGINAL_TAG, NEW_IMAGE_NAME:NEW_TAG)

в вашем случае, что-то вроде

testImage.tag ("artifactory.mycompany.com/docker-dev/appname/dev:latest" "artifactory.mycompany.com/docker-dev/appname/test:latest")

, а затем pu sh каждое изображение независимо от другого

testImage.push (ORIGINAL_IMAGE_NAME:ORIGINAL_TAG)
testImage.push (NEW_IMAGE_NAME:NEW_TAG)
...