Thiết lập quy trình CI/CD cho ứng dụng Spring Boot trên AWS

6c77a19f-79b4-4f45-a97f-a174eaf767cc

Bài hướng dẫn này sẽ đưa bạn từng bước thiết lập quy trình CI/CD để triển khai một ứng dụng Spring Boot được đóng gói bằng Docker lên AWS. Chúng ta sẽ tạo một Dockerfile, build image, đẩy nó lên AWS Elastic Container Registry (ECR), và triển khai thông qua AWS Elastic Container Service (ECS).

Step 1: Tạo Dockerfile

Trong thư mục gốc của dự án, hãy tạo một Dockerfile cho ứng dụng Spring Boot. File này sẽ giúp Docker đóng gói ứng dụng thành Docker image

Dockerfile

FROM maven:3.8.3-openjdk-17 as build
WORKDIR ./src
COPY . .
RUN mvn install -DskipTests=true

FROM openjdk-17

RUN unlink /etc/localtime;ln -s  /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
COPY --from=build src/target/filename.jar /run/filename.jar

EXPOSE 8080

ENV JAVA_OPTIONS="-Xmx2048m -Xms256m"
ENTRYPOINT java -jar $JAVA_OPTIONS /run/filename.jar

Step 2: Tạo một Repository trên ECR

Trong AWS Management Console:

  1. Truy cập Amazon ECR
d1711a58-7433-4d8b-af4f-ec30e59e0690
  1. Chọn Create Repository
bb581efa-67ac-4daa-a50d-113e41306878
  1. Nhập tên cho repository của bạn (ví dụ: springboot-app)
9fa43054-a464-4cc3-9ee0-c69550b65bcb
  1. Chọn quyền truy cập là Private và nhấn Create Repository
b44a5e3a-e1ab-44de-ac2e-bcd4ff1244f0

Ghi lại URI của repository (ví dụ: 471112792443.dkr.ecr.ap-south-1.amazonaws.com/springboot-app), vì nó sẽ được sử dụng trong cấu hình build

93f6e7e6-b8ac-4821-8c85-697feef54a93

Step 3: Tạo tệp Buildspec

File buildspec.yml được AWS CodeBuild sử dụng để định nghĩa các lệnh và giai đoạn build. Đặt file này ở thư mục gốc của dự án

version: 0.2

phases:
  pre_build:
    commands:
      - mvn clean install
      - echo Logging in to Amazon ECR...
      - aws --version
      - REPOSITORY_URI=471112792443.dkr.ecr.ap-south-1.amazonaws.com/springboot-app
      - 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...
      - DOCKER_CONTAINER_NAME=springboot-app
      - 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/filename.jar

Giải thích:

Pre-Build: Cài đặt các phụ thuộc, đăng nhập vào ECR và thiết lập các biến cho thẻ image.

Build: Xây dựng Docker image và gắn thẻ cho nó.

Post-Build: Đẩy Docker image lên ECR và tạo tệp imagedefinitions.json để triển khai.

Step 4: Tạo một Dự án CodeBuild cho CI

  1. Truy cập AWS CodeBuild
97a83a77-2e6c-4c8a-bf18-9d3348853118
  1. Chọn Create Project
3e7f3dc1-b65c-4134-8d14-eafe74228e1b
  1. Đặt tên cho dự án và chọn GitHub làm nguồn, kết nối với repository của bạn
7b372f0d-9fc5-44cb-b60a-a5af91e1cf49
  1. Chọn Managed Image làm môi trường và chọn một image có hỗ trợ Docker (ví dụ: aws/codebuild/standard:5.0)
9a0bf7a1-ce5b-4b3d-9b33-f5389adcdfc4
  1. Thêm các biến môi trường cần thiết và chỉ định buildspec.yml làm cấu hình build
e2c49888-59a8-4770-ac18-bde347023bfb
  1. Dưới mục Artifacts, chọn imagedefinitions.json
5d7af222-4ebc-4b23-a941-b1541eff1887

CodeBuild sẽ xây dựng Docker image và đẩy nó lên ECR mỗi khi mã nguồn được đẩy lên GitHub

44266934-d807-4fee-885d-8624ef8f602d

Step 5: Triển khai ứng dụng sử dụng AWS ECS

  1. Trong ECS, tạo một cluster mới.
  2. Tạo một task definition với cấu hình container của bạn.
  3. Đặt image thành ECR image URI được tạo bởi CodeBuild.
  4. Định nghĩa service của bạn và triển khai nó.

Step 6: Kiểm tra việc triển khai

Truy cập URL của dịch vụ ECS và thêm /swagger-ui/index.html để truy cập Swagger UI của ứng dụng đã triển khai.

Ví dụ URL:

http://65.0.69.103:8080/swagger-ui/index.html

Step 7: Kích hoạt quy trình CodeBuild thủ công

Thực hiện một thay đổi nhỏ trong repository GitHub của bạn và đẩy nó lên. Dự án CodeBuild sẽ tự động kích hoạt, xây dựng lại và đẩy Docker image đã cập nhật.

Xác minh Webhook

Để kiểm tra xem webhook đã được thiết lập đúng chưa, thực hiện thay đổi mã, commit và đẩy lên. Quy trình sẽ tự động bắt đầu, triển khai phiên bản mới nhất lên ECS.

Trên đây là các bước để bạn có thể thiết lập CI/CD dự án springboot trên ECR. Nếu có ý kiến gì mọi người cứ hỏi mình nha.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm