Search code examples
amazon-web-servicesdockerjenkinsdocker-imageamazon-ecr

How to push Docker image to ECR in Jenkins?


I am working with Jenkins. I am trying to push image to ECR. I am using local Docker to build the images.

Below is my Jenkins file:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                bat  'docker build -t sampleapp -f SampleApp/Dockerfile .'
            }
        }
        stage('Push image') {
         steps {
           withDockerRegistry([url: "https://536703334988.dkr.ecr.ap-southeast-2.amazonaws.com/test-repository",credentialsId: "ecr:ap-southeast-2:demo-ecr-credentials"]) {
           bat 'docker push sampleapp:latest'
               }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

In the above code, I am able to build and create an image. In the second stage, I am facing the issues. I am getting the below error:

$ docker login -u AWS -p ******** https://536703334988.dkr.ecr.ap-southeast-2.amazonaws.com/test-repository

WARNING! Using --password via the CLI is insecure. Use --password-stdin.  
Login Succeeded
C:\Program Files (x86)\Jenkins\workspace\SampleAppPipeLine>docker push sampleapp:latest 
The push refers to repository [docker.io/library/sampleapp]
a160522d6d0e: Preparing
2e2c2606bd45: Preparing
9b0a482c69b1: Preparing
995a0cc6a5f6: Preparing
c1b55dcb46c2: Preparing
cf5b3c6798f7: Preparing
cf5b3c6798f7: Waiting
    
denied: requested access to the resource is denied

Can someone help me to fix this issue? Any help would be appreciated.
Thanks.


Solution

  • Default repository of docker.io is being hardcode is : docker.io/library/

    So for AWS ECR repo, you should :

    docker build -t test-repository .
    

    docker tag test-repository:latest 536703334988.dkr.ecr.ap-southeast-2.amazonaws.com/test-repository:latest

    docker push 536703334988.dkr.ecr.ap-southeast-2.amazonaws.com/test-repository:latest
    

    Make sure test-repository repo is already create on ECR.