Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-44143

ECR plugin: no basic auth credentials

    XMLWordPrintable

    Details

    • Similar Issues:

      Description

      I'm not able to push Docker images to Amazon ECR with Jenkins Pipeline, I always get 
      no basic auth credentials

      I've added AWS credentials named `aws-jenkins` to Jenkins (tested locally and successfully pushed to AWS ECR)

      Jenkinsfile:

      stage("Docker") {
        dir(path) {
          docker.build("my-image:latest")
        }
        docker.withRegistry("https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com", "ecr:eu-central-1:aws-jenkins") {
          // debug
          sh "cat /root/.dockercfg" 
          docker.image("my-image:latest").push()
        }
      }

       

      Logs:

      [Pipeline] withDockerRegistry
      Wrote authentication to /root/.dockercfg
      [Pipeline] {
      [Pipeline] sh
      [docker-emotion-compilers] Running shell script
      + cat /root/.dockercfg
      {"https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com": {
      "auth": "[...]",
      "email": "nobody@example.com"
      }}[Pipeline] sh
      [docker-emotion-compilers] Running shell script
      + docker tag --force=true my-image:latest <my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image:latest
      Warning: '--force' is deprecated, it will be removed soon. See usage.
      [Pipeline] sh
      [docker-emotion-compilers] Running shell script
      + docker push <my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image:latest
      The push refers to a repository [<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image]
      e30bf54e0f87: Preparing
      b9f2c30c0d28: Preparing
      5defc95691fd: Preparing
      295d6a056bfd: Preparing
      no basic auth credentials
      [Pipeline] }
      [Pipeline] // withDockerRegistry

       

      I also tried with other AWS credentials and I always get no basic auth credentials error  

        Attachments

        1. ecr.png
          ecr.png
          48 kB
        2. ecr2.log
          20 kB

          Issue Links

            Activity

            Hide
            ifernandezcalvo Ivan Fernandez Calvo added a comment -

            James Heggs This issue is closed because it is not related to ECR Plugin, it does not save anything to disk or interact with docker,  ECR Plugin only accesses to Amazon ECR to request a token to create a virtual credential on Jenkins, This issue could be related with docker or to docker-workflow-plugin dunno

            Show
            ifernandezcalvo Ivan Fernandez Calvo added a comment - James Heggs  This issue is closed because it is not related to ECR Plugin, it does not save anything to disk or interact with docker,  ECR Plugin only accesses to Amazon ECR to request a token to create a virtual credential on Jenkins, This issue could be related with docker or to docker-workflow-plugin dunno
            Hide
            eggsy1984 James Heggs added a comment -

            No problem Ivan Fernandez Calvo thank you for the clarification

            Show
            eggsy1984 James Heggs added a comment - No problem Ivan Fernandez Calvo thank you for the clarification
            Hide
            tictocs Tom Manterfield added a comment -

            Just wanted to leave a note here for anyone stumbling across this whilst trying to debug. I had the same problem and chased it down to how the docker-commons plugin uses docker configs. It seems that it will only use/save to the newer .docker/config.json if it already exists, otherwise it saves auths to the .dockercfg file (which is then ignored depending on your docker version/setup).

            I had to add both the environment variable DOCKER_CONFIG=$JENKINS_HOME/.docker and create a stub config.json file with the content '{"auths":{}}' within that DOCKER_CONFIG dir. Once I did both of these things, it all worked perfectly.

            Show
            tictocs Tom Manterfield added a comment - Just wanted to leave a note here for anyone stumbling across this whilst trying to debug. I had the same problem and chased it down to how the docker-commons plugin uses docker configs. It seems that it will only use/save to the newer .docker/config.json if it already exists, otherwise it saves auths to the .dockercfg file (which is then ignored depending on your docker version/setup). I had to add both the environment variable DOCKER_CONFIG=$JENKINS_HOME/.docker and create a stub config.json file with the content '{"auths":{}}' within that DOCKER_CONFIG dir. Once I did both of these things, it all worked perfectly.
            Hide
            lugoues Peter Brunner added a comment -

            Tom Manterfield a question for you, if you will. I too ran into this problem and noticed that the $JENKINS_HOME that this ECR plugin runs with differed from the $JENKINS_HOME that the docker plugin used. This essentially caused the config.json to be written to one place while docker looked in another. Was this the case for you too?

            Show
            lugoues Peter Brunner added a comment - Tom Manterfield  a question for you, if you will. I too ran into this problem and noticed that the $JENKINS_HOME that this ECR plugin runs with differed from the $JENKINS_HOME that the docker plugin used. This essentially caused the config.json to be written to one place while docker looked in another. Was this the case for you too?
            Hide
            ifernandezcalvo Ivan Fernandez Calvo added a comment -

            I forgot to put this workaround here, this removes the docker credentials before create new ones from Amazon ECR

            node {
                    //cleanup current user docker credentials
                    sh 'rm  ~/.dockercfg || true'
                    sh 'rm ~/.docker/config.json || true'
                    
                    //configure registry
                    docker.withRegistry('https://ID.ecr.eu-west-1.amazonaws.com', 'ecr:eu-west-1:86c8f5ec-1ce1-4e94-80c2-18e23bbd724a') {
                      
                        //build image
                        def customImage = docker.build("my-image:${env.BUILD_ID}")
                        
                        //push image
                        customImage.push()
                    }
            
            Show
            ifernandezcalvo Ivan Fernandez Calvo added a comment - I forgot to put this workaround here, this removes the docker credentials before create new ones from Amazon ECR node { //cleanup current user docker credentials sh 'rm ~/.dockercfg || true ' sh 'rm ~/.docker/config.json || true ' //configure registry docker.withRegistry( 'https: //ID.ecr.eu-west-1.amazonaws.com' , 'ecr:eu-west-1:86c8f5ec-1ce1-4e94-80c2-18e23bbd724a' ) { //build image def customImage = docker.build( "my-image:${env.BUILD_ID}" ) //push image customImage.push() }

              People

              • Assignee:
                ifernandezcalvo Ivan Fernandez Calvo
                Reporter:
                cthiebault Cedric Thiebault
              • Votes:
                1 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: