
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