Blog
  • 2023-03-02

Create a multistage Dockerfile and multibranch using Jenkins to push into Elastic Container Registry using GitHub  

 

// Create an EC2 instance and login through Gitbash
// Install Java
// Install Jenkins and run with port number 8080
// Create a Dockerfile for Golang image and Install Tomcat on Centos 

 

Dockerfile for Golang image 

FROM golang:1.8
WORKDIR /go/src/app 

COPY main.go .
RUN go build -o webserver . 

CMD ["./webserver"] 

   

Multistage Dockerfile for Golang image 

FROM golang:1.15.3 as builder 

WORKDIR /app/
COPY . .
RUN go build -o app /app/main.go 

FROM alpine:latest 

WORKDIR /app/
COPY --from=builder /app/ /app/ CMD ./app 

 

Dockerfile for Installing Tomcat on Centos 

    

FROM centos:latest 

RUN cd /etc/yum.repos.d/ 

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* 

RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* 

RUN yum -y install java

RUN mkdir /opt/tomcat/

WORKDIR /opt/tomcat

ADD https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz .    

RUN tar -xvzf apache-tomcat-9.0.71.tar.gz 

RUN mv apache-tomcat-9.0.71/* /opt/tomcat 

EXPOSE 8080

CMD ["/opt/tomcat/bin/catalina.sh", "run"] 

 

// Create a ECR Repository say name as demo
// Create a Programmatic user and create an Access key and Security key using IAM user 

// Give full access to ECR in IAM
// Generate Jenkins pipeline using pipeline syntax 

  

Jenkinsfile using Git to build an image and push into ECR
 

    

pipeline {     

   agent any 

   stages {

          stage('Build') {  

               steps {

          sh 'printenv'   

                }  

              }

              stage ('Publish ECR') {      

                steps { 

                  withEnv

(["AWS_ACCESS_KEY_ID=${env.AWS_ACCESS_KEY_ID}","AWS_SECRET_ACCESS_KEY=${env.AWS_SECRET_ACCESS_KEY}","AWS_DEFAULT_REGION=${env.AWS_DEFAULT_REGIO N}"]) {  

                              sh 'aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/x8z8q6s2' 

                               sh 'docker build -t demo .'

                               sh 'docker tag demo:latest public.ecr.aws/x8z8q6s2/demo:latest""$BUILD-ID""' 

                              sh 'docker push public.ecr.aws/x8z8q6s2/demo:latest""$BUILD-ID""' 

                      }

                    }

                  }

                }

              }
 


    

// Create a new job in Jenkins as Multibranch Pipeline
 

// In GitHub make sub branches as Master,Dev,Test,Prod
 

// Configure in Jenkins in Multibranch Pipeline using GitHub
 

// Scan all the branches in Multibranch Pipeline
 

// After scanning all branches in Jenkins Pipeline. The Docker image will push into Ecr
 

// Check ECR Repository whether image is pushed or not 

 

 

 

 

 

 

 

    

Commands used to push into ECR 

 

 

 

 

 

Thank you!

Author's name: Mithun S

Solutions Architect | DevOps Engineer