无法将docker镜像推送到artifactory注册表

时间:2018-01-09 12:55:32

标签: docker jenkins jenkins-pipeline artifactory

我无法将docker镜像推送到神器注册表以下错误

登录和拉动工作正常

92bd1433d7c5: Layer already exists
b31411566900: Layer already exists
f0ed7f14cbd1: Layer already exists
851f3e348c69: Layer already exists
e27a10675c56: Layer already exists
EOF

Jenkinsfile:

node ('lnp6xxxxxxb003') {
    def app
    def server = Artifactory.server 'maven-qa'
    server.bypassProxy = true

    stage('Clone repository') {
        /* Let's make sure we have the repository cloned to our workspace */

        checkout scm
    }

    stage('Build image') {
        /* This builds the actual image; synonymous to
         * docker build on the command line */

        app = docker.build("devteam/maven")
    }

    stage('Test image') {
        /* Ideally, we would run a test framework against our image.

        app.inside {
            sh 'mvn --version'
            sh 'echo "Tests passed"'
        }
    }

    stage('Push image') {
        /* Finally, we'll push the image with two tags:
         * First, the incremental build number from Jenkins
         * Second, the 'latest' tag.
         * Pushing multiple tags is cheap, as all the layers are reused. */
          docker.withRegistry('https://docker.maven-qa.xxx.partners', 'docker-credentials') {
            app.push("${env.BUILD_NUMBER}")
          /*  app.push("latest") */
        }
    }
}

Dockerfile:

# Dockerfile

FROM maven

ENV MAVEN_VERSION 3.3.9

ENV MAVEN_HOME /usr/share/maven

VOLUME /root/.m2

CMD ["mvn"]

不确定那是什么问题。我能够在jenkins从节点上手动推送图像。但是使用jenkins会产生错误

我的构建作业日志

    Logs
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build image)
[Pipeline] sh
[docker-maven-image] Running shell script
+ docker build -t devteam/maven .
Sending build context to Docker daemon 231.9 kB

Step 1 : FROM maven
 ---> 1f858e89a584
Step 2 : ENV MAVEN_VERSION 3.3.9
 ---> Using cache
 ---> c5ff64f9ff9f
Step 3 : ENV MAVEN_HOME /usr/share/maven
 ---> Using cache
 ---> 2a2028d6fdbc
Step 4 : VOLUME /root/.m2
 ---> Using cache
 ---> a50223412b56
Step 5 : CMD mvn
 ---> Using cache
 ---> 2d32a26dde10
Successfully built 2d32a26dde10
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Push image)
[Pipeline] withDockerRegistry
Wrote authentication to /usr/share/tomcat6/.docker/config.json
[Pipeline] {
[Pipeline] sh
[docker-maven-image] Running shell script
+ docker tag --force=true devteam/maven devteam/maven:84
unknown flag: --force
See 'docker tag --help'.
+ docker tag devteam/maven devteam/maven:84
[Pipeline] sh
[docker-maven-image] Running shell script
+ docker push devteam/maven:84
The push refers to a repository [docker.maven-qa.XXXXX.partners/devteam/maven]
e13738d640c2: Preparing
ef91149a34fb: Preparing
3332503b7bd2: Preparing
875b1eafb4d0: Preparing
7ce1a454660d: Preparing
d3b195003fcc: Preparing
92bd1433d7c5: Preparing
f0ed7f14cbd1: Preparing
b31411566900: Preparing
06f4de5fefea: Preparing
851f3e348c69: Preparing
e27a10675c56: Preparing
92bd1433d7c5: Waiting
f0ed7f14cbd1: Waiting
b31411566900: Waiting
06f4de5fefea: Waiting
851f3e348c69: Waiting
e27a10675c56: Waiting
d3b195003fcc: Waiting
e13738d640c2: Layer already exists
3332503b7bd2: Layer already exists
7ce1a454660d: Layer already exists
875b1eafb4d0: Layer already exists
ef91149a34fb: Layer already exists
d3b195003fcc: Layer already exists
f0ed7f14cbd1: Layer already exists
b31411566900: Layer already exists
92bd1433d7c5: Layer already exists
06f4de5fefea: Layer already exists
851f3e348c69: Layer already exists
e27a10675c56: Layer already exists
EOF
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

这就是我在构建日志中的内容。

2 个答案:

答案 0 :(得分:0)

我在神器中使用nginx作为负载均衡器后面的反向代理。我从nginx配置中移除了以下行并且它工作了 proxy_set_header X-Artifactory-Override-Base-Url

$http_x_forwarded_proto://$host/artifactory;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

我仍然不确定这些标头导致问题的原因。

答案 1 :(得分:0)

启用Docker管道插件开始工作后,我也遇到了同样的问题。我认为这可能对您有帮助https://plugins.jenkins.io/docker-workflow/

相关问题