반응형
name: Spring Boot CI/CD Pipeline
on:
push:
branches:
- main # main 브랜치에 푸시될 때 실행
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v3
- name: JDK 17 설정
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
- name: application.properties 파일 만들기
run: |
mkdir -p ./src/main/resources
echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.properties
- name: Gradle 빌드 및 테스트 실행
run: |
chmod +x gradlew
./gradlew clean build
- name: Docker Hub 로그인
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker 이미지 빌드 및 푸시
run: |
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/jinhwanbae:latest .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/jinhwanbae:latest
deploy:
needs: build_and_test
runs-on: ubuntu-latest
steps:
- name: EC2 서버에 SSH 접속하여 배포
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script: |
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/jinhwanbae:latest
docker stop spring-backend || true
docker rm spring-backend || true
docker run -d -p 8080:8080 --name spring-backend ${{ secrets.DOCKERHUB_USERNAME }}/jinhwanbae:latest
- deploy.yml 파일을 위와 같이 적어준다
- github secretes에 위에서부터 각각 이름에 맞는 속성들을 넣어준다
- application.properties에는 db설정,
- docker hub 관련 아이디, 비밀번호, 엑세스 토큰
- EC2 주소, 유저, PRIVATE_KEY
- CI/CD 전체 흐름은 아래와 같다
- github main 브랜치에 푸시되면, 코드를 checkout하고
- JDK 17로 JAVA 21버전
- 그리고 Secrets에서 application.properties를 참고해서 저장소에 application.properties를 만들고
- jar파일을 빌드하고
- 도커허브에 로그인하고
- 해당 jar파일 기반으로 이미지를 만들고(DockerFile을 미리 만들어야 한다) hub에 push한다
- ec2에 접속한다
- 방금 push된 이미지를 내려받는다
- 내려받은 이미지로 컨테이너를 실행시킨다
반응형
'SKALA > Back-end, DB' 카테고리의 다른 글
메시지 브로커(Redis, Apache Kafka) (0) | 2025.04.08 |
---|---|
트랜잭션 격리 수준(Isolation Level), Stored Procedure, Trigger (0) | 2025.04.07 |
BASE vs ACID , Index (0) | 2025.04.04 |
ERD, Chen, IE, UML 클래스 다이어그램 표기법 (0) | 2025.04.03 |