Deployment – CI/CD

How to deploy springboot to ECS using CodeBuild and CodePipeline ?

Step 1:

Create a Docker file inside JAVA Springboot project and add this content

#Use the official OpenJDK 17 image from Docker Hub
FROM openjdk:17
#Set working directory inside the container
WORKDIR /app
#Copy the compiled Java application JAR file into the container
COPY ./target/course-service.jar /app
#Expose the port the Spring Boot application will run on
EXPOSE 8080
#Command to run the application
CMD [“java”, “-jar”, “course-service.jar”]

Step 2:

Create Elastic Content Registry at AWS Console.

  • Got o ECR Registry at AWS Console
  • Create repository
  • Write a name for the repository. For an example, “java-registry”

Now we can see the created registry called “java-registry”

Step 3:

Need to create a buildspec.yaml file inside the project. This buildspec.yaml file will create the docker image and then push the image to the hub. Now need to define command for the buildspec.yaml file.

version: 0.2
phases:
pre_build:
commands:
– mvn clean install
– echo Logging in to Amazon ECR…
– aws –version
– REPOSITORY_URI=339713037827.dkr.ecr.ap-south-1.amazonaws.com/javatechie-registry
– aws ecr get-login-password –region ap-south-1 | docker login –username AWS –password-stdin $REPOSITORY_URI
– COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
– IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F”:” ‘{print $2}’)
build:
commands:
– echo Build started on date
– echo Building the Docker image…
– docker build -t $REPOSITORY_URI:latest .
– docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
– echo Build completed on date
– echo Pushing the Docker images…
– docker push $REPOSITORY_URI:latest
– docker push $REPOSITORY_URI:$IMAGE_TAG
– echo Writing image definitions file…
– printf ‘[{“name”:”course-service”,”imageUri”:”%s”}]’ $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
– echo Writing image definitions file…
# add your container name
– DOCKER_CONTAINER_NAME=java-registry
– printf ‘[{“name”:”%s”,”imageUri”:”%s”}]’ $DOCKER_CONTAINER_NAME $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
– echo $DOCKER_CONTAINER_NAME
– echo printing imagedefinitions.json
– cat imagedefinitions.json
artifacts:
files:
– imagedefinitions.json
– target/course-service.jar

Step 4:

Now task for the AWS code build. Go to the code build at aws console.

  • Create project
  • Project name can be “course-project”
  • Select a source provider from Source 1 primary. For an example, select GitHub from dropdown because our project is in at GitHub repository.

Leave a comment