
기본 패키지 안에 요청을 처리하는 클래스를 추가하고 작성(FrontController)
package com.bh.apiserver;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class FrontController {
@GetMapping
public Map<String, Object> index() {
Map<String, Object> data = new HashMap<>();
data.put("result", "success");
List<Map<String, String>> list = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("id", "yachae");
map1.put("name", "bh");
list.add(map1);
data.put("list", list);
return data;
}
}
브라우저에서 실행 확인 : http://localhost:8080

./gradlew clean build

프로젝트의 루트 디렉토리에 Dokcerfile 생성하고 작성
FROM amazoncorretto:23
CMD ["./mvnw", "clean", "package"]
ARG JAR_FILE=target/*.jar
COPY ./build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
터미널에서 이미지 생성
docker build -f Dockerfile -t apiserver:0.0.1 .
docker images
docker run -d --name apiserver -p 80:8080 apiserver:0.0.1


GitHub에 push
git init
git add .
git commit -m "message"
# 브랜치 확인(현재 git hub는 main이 기본 브랜치)
git branch
# 브랜치 이름 변경
git branch -M main
# 원격 저장소 등록: git remote add 저장소이름 url
git remote add origin https://github.com/yachae1101/apiserver.git
# push
git push origin main

push가 발생할 때 DockerHub에 이미지 배포
Docker Hub에서 토큰 발급
Docker Hub에 Repository를 생성: apiserver

프로젝트 안에 .github/workflows/upload.yml 생성하고 작성
name: Java CI with Gradle
on:
push:
branches: ["main"]
jobs:
build-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
#JDK 23버전 설치
- name: Set Up JDK 23
uses: actions/setup-java@v3
with:
java-version: '23'
distribution: 'temurin'
#빌드
- name: Build and Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean bootJar
#도커 허브 로그인
- name: Login To DockerHub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
#이미지 빌드 및 업로드
- name: Image Build and Release to DockerHub
env:
NAME: ${{secrets.DOCKERHUB_USERNAME}}
REPO: ${{secrets.DOCKERHUB_REPOSITORY}}
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
GitHub 의 repository 에 variable 을 등록


생성한 .github/workflows/upload.yml 파일을 push 하여 GitHub Action 동작
git add .
git commit -m ".github/workflows/upload.yml added"
git push origin main
GitHub Actions 동작 확인

배포가 제대로 되었는지 도커 허브에서 확인

이미지가 제대로 동작하는지 확인
docker pull yachae1101/apiserver
docker images

docker run -d --name apiserver-container -p 80:8080 yachae1101/apiserver
docker ps


pod를 생성을 위한 springboot-deployment.yml 파일을 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: devops-spring-deployment
spec:
selector:
matchLabels:
app: devops-spring-app
spec:
selector:
matchLabels:
app: devops-spring-app
replicas: 2
template:
metadata:
labels:
app: devops-spring-app
spec:
containers:
- name: core
image: yachae1101/apiserver
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 500m
memory: 1000Mi
kubectl apply -f springboot-deployment.ymlkubectl get pods
apiVersion: v1
kind: Service
metadata:
name: devops-spring-service
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: devops-spring-appkubectl apply -f service.ymlkubectl get svc
kubectl get svc -o wide
kubectl get ep