Spring Boot 프로젝트 만들기
스프링 프로젝트를 만들기 위해 Spring Boot initializr 사이트로 이동한다.
https://start.spring.io/
Spring initializr
Dependencies 에서 Spring Web 을 추가한다.
intellij 에서 만들어진 demo 프로젝트를 실행해보기 DemoApplication.java
위와 같이 SpringBoot가 terminal에서 뜨면 성공!
github에 프로젝트 올리기
github에서 repo를 하나 만든다.
프로젝트에서 terminal을 열어서 github로 spring boot를 올린다,
intellij - demo project 폴더 안 terminal 에서 명령어를 친다.
demo > git init
demo > git remote add https://github.com/chwangmin/spring-boot-test2.git
demo > git add .
demo > git commit -m ":tada: init"
demo > git branch -m master main
demo > git push --set-upstream origin main
dockerfile 만들기
demo project 최상단 폴더에 Dockerfile을 만든다
그리고 파일의 내용을 아래와 같이 적용한다.
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
github workflow 만들기
만든 github repo의 상단 탭에서 Actions 을 선택하고 Java with Gradle 을 Configure 한다.
Java with Gradle 로 CI 테스트 하기.
만들어진 .github/workflows/gradle.yml의 파일에서 필요없는 부분은 삭제하고 commit change를 한다.
(gradle을 사용할 수 있게 만들어야 함)
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle Wrapper
run: ./gradlew build
아래와 같이 Actions 에서 workflow 를 확인하면 gradle이 정상적으로 build가 되는 것을 확인할 수 있다.
이것이 CI 이다.
spring boot gradle 을 build 함으로써 test를 진행하기 때문이다.
CD 작성하기 + dockerhub
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build-docker-image:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Spring Boot 어플리케이션 Build
- name: Build with Gradle Wrapper
run: ./gradlew build
# Docker 이미지 Build
- name: docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test .
# DockerHub Login (push 하기 위해)
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# Docker hub 로 push
- name: Docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
# 위 과정에서 푸시한 이미지를 ec2에서 풀받아서 실행
run-docker-image-on-ec2:
needs: build-docker-image
runs-on: self-hosted
steps:
- name: docker pull
run : sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
- name: docker stop container
run: |
if [ $(sudo docker ps -a -q -f name=spring-cicd-test) ]; then
sudo docker stop spring-cicd-test
fi
- name: docker run new container
run: sudo docker run --rm -it -d -p 80:8080 --name spring-cicd-test ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
- name: delete old docker image
run: sudo docker system prune -f
github setting 설정
${{ secrets.~}} 와 self-hosted를 설정해야 한다.
github secrets 설정
먼저 github repo 의 상단의 Settings을 선택한다.
그리고 현재 gradle.yml 에 적어둔 ${{ secrets.DOCKERHUB_USERNAME }}, ${{ secrets.DOCKERHUB_PASSWORD }} 에 대한 값을 넣어야 한다.
그래서 각각 자신의 도커 허브의 이름과, 패스 워드를 아래와 같이 Add secret 하면 된다.
self-hosted 설정
먼저 github repo 의 상단의 Settings을 선택하고, 오른쪽 탭에 Actions > Runners 를 선택한다.
오른쪽 상단 초록색 버튼 new self-hosted runner 을 선택한다.
그 후 나오는 윈도우에서 linux를 선택하고, mkdir ~ ./config.sh ~ 까지 자신의 ec2에 입력한다.
ec2 에서 아래와 같이 뜨면 성공!
그리고 github와 연결을 한다. background 연결.
sudo ./svc.sh install
sudo ./svc.sh start
ec2 에서 docker을 설치한다.
workflow 에서 자신의 ec2에서 수행하는데, docker 명령어가 실행이 안될 것이다. 그래서 ec2에서 docker을 설치한다.
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
그리고 마지막으로 github actions 재기동! 끝
'BACKEND > Spring' 카테고리의 다른 글
[Spring Boot] Redis로 캐싱 구현 하기 (0) | 2024.04.30 |
---|---|
[Servlet] 멀티 쓰레드, 하나의 서블릿이 동시 요청을 어떻게 처리할까? (0) | 2024.04.04 |
[Servlet] Spring은 왜 하나의 서블릿만 사용할까? (0) | 2024.04.03 |
[Servlet] Sevlet의 동작 흐름, 방식, 생명주기 (0) | 2024.04.02 |
[Spring Boot] JWT - Access Token, Refresh Token을 어디에 저장할까? feat. XSS, CSRF (0) | 2024.03.12 |