본문으로 바로가기

Github, Docker CI/CD

category SKALA/Back-end, DB 2025. 4. 15. 10:26
반응형
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

 

  1. deploy.yml 파일을 위와 같이 적어준다
  2. github secretes에 위에서부터 각각 이름에 맞는 속성들을 넣어준다
    1. application.properties에는 db설정, 
    2. docker hub 관련 아이디, 비밀번호, 엑세스 토큰
    3. EC2 주소, 유저, PRIVATE_KEY
  3. CI/CD 전체 흐름은 아래와 같다
    1. github main 브랜치에 푸시되면, 코드를 checkout하고 
    2. JDK 17로 JAVA 21버전
    3. 그리고 Secrets에서 application.properties를 참고해서 저장소에 application.properties를 만들고
    4. jar파일을 빌드하고 
    5. 도커허브에 로그인하고
    6. 해당 jar파일 기반으로 이미지를 만들고(DockerFile을 미리 만들어야 한다) hub에 push한다
    7. ec2에 접속한다
    8. 방금 push된 이미지를 내려받는다
    9. 내려받은 이미지로 컨테이너를 실행시킨다
반응형