У меня есть изображение уже в моем личном репо. Мне нужно вытащить это изображение, создать тег и отправить его в реестр.
Какой лучший способ сделать это с помощью 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()
}
}
}
}