Не удается отправить изображение Docker в Artifactory в конвейере Jenkins с помощью плагина Artifactory
Я использую Docker Registry на Artifactory. Я могу тянуть / толкать изображения с помощью команд докера. Теперь я пытаюсь протолкнуть изображение с помощью линии Дженкинса.
Изображение называется registry-url/docker/image:latest
, У меня есть Docker репозиторий на Artifactory, который называется docker
, (Я могу тянуть и подтолкнуть к этому репо с помощью команд докера).
Этот этап описывает мою конфигурацию Artifactory:
...
stage('Deploy Docker image'){
steps {
script {
def server = Artifactory.server 'xxx'
def rtDocker = Artifactory.docker server: server
def buildInfo = rtDocker.push('registry-url/image:latest', 'docker')
//also tried:
//def buildInfo = rtDocker.push('registry-url/docker/image:latest', 'docker')
//the above results in registry/docker/docker/image..
server.publishBuildInfo buildInfo
}
}
}
...
Когда я использую разные пути, я сталкиваюсь с manifest.json
ошибка, которая, вероятно, нормально. Я могу загрузить файл manifest.json вручную: https://registry-url/artifactory/docker/image/latest/manifest.json
,
Я использую довольно новую версию Docker для Jenkins:
Docker version 18.01.0-ce, build 03596f51b1
Все идет нормально. Но когда я запускаю конвейер, я получаю следующую ошибку в Jenkins (это занимает 50 секунд):
Pushing image: registry-url/image:latest
...
com.github.dockerjava.api.exception.DockerClientException: Could not push image: unknown: Not Found
at com.github.dockerjava.core.command.PushImageResultCallback.awaitSuccess(PushImageResultCallback.java:49)
at org.jfrog.hudson.pipeline.docker.utils.DockerUtils.pushImage(DockerUtils.java:60)
at org.jfrog.hudson.pipeline.docker.utils.DockerAgentUtils$3.call(DockerAgentUtils.java:213)
at org.jfrog.hudson.pipeline.docker.utils.DockerAgentUtils$3.call(DockerAgentUtils.java:205)
at hudson.remoting.UserRequest.perform(UserRequest.java:153)
at hudson.remoting.UserRequest.perform(UserRequest.java:50)
...
В журналах Artifactory я вижу:
2018-04-25 14:24:26,663 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,684 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,689 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,702 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
Что я пропускаю или делаю неправильно?
РЕДАКТИРОВАТЬ: На основе этого вопроса я вернулся к своей первоначальной идее:
def buildInfo = rtDocker.push('registry-url/docker/image:latest', 'docker')
Я попробовал построить снова. Ошибка:
Could not find manifest.json in Artifactory in the following path: https://registry-url/artifactory/docker/docker/image/latest/manifest.json
Дважды "докер" в пути, и это, кажется, не работает. НО когда я проверяю в Artifactory изображение там... я также могу вытащить изображение. Кажется, все в порядке, но сборка jenkins все еще не работает.
Артефакторный плагин: 2.15.1
Артефакторная версия: 5.10.3
Это действительно ошибка, которая будет исправлена в ближайшее время?
2 ответа
Artifcatory может быть настроен как реестр Docker с или без обратного прокси. Похоже, что ваш Artifactory не настроен с использованием обратного прокси-сервера (без прокси-конфигурации). Вы можете прочитать больше о параметрах конфигурации здесь.
В версии 2.16.1 плагина Jenkins Artifactory добавлена поддержка конфигурации без прокси. Обновление вашего Artifactory Plugin должно решить вашу проблему.
Попробуйте следовать этому примеру. Здесь у нас есть конвейер Jenkins для извлечения / отправки образа докера в / из Artifactory: https://github.com/jfrogtraining/kubernetes_example/blob/master/docker-app/Jenkinsfile