일반 프로젝트에서 쓰이는 CI/CD 구축 방식

2026. 1. 10. 20:51·Server&load/CI CD

저번에는 개인 프로젝트에서 쓰이는 CI/CD 구축방식에 대해서 작성해 보았다.

 

복습하자면, github 에 코드를 넣은 뒤, AWS 의 EC2에서 git pull을 진행한 뒤에 자동으로 빌드되도록 했는데

이번에는 일반 프로젝트처럼 github actions 에서 빌드 완성물을 만든 뒤 EC2에 전달해 볼 예정이다.

1. 일반 프로젝트에서 쓰이는 CI/CD 구축 방식

name : Deploy To EC2

on:
  push:
    branches:
      - main

jobs:
  My-Deploy-Job:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 에 올린 파일들을 불러오기
        uses: actions/checkout@v4
      
      - name: Github Actions 확인
        run: |
          ls
          pwd
        
        
      - name: JDK 17 설치
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: application.properties 파일 생성 및 EC2 배포
        run: |
          echo "${{ secrets.APPLICATION_PROPERTIES }}" > src/main/resources/application.properties

      - name: Test and Build with Gradle
        run: ./gradlew clean build

      - name: 빌드 결과물 확인
        run: |
          ls build/libs

      - name: 빌드된 파일 이름 변경
        run: |
          mv build/libs/*SNAPSHOT.jar ./rusharp-server-SNAPSHOT.jar

      - name: SCP로 빌드된 파일을 EC2로 복사
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.EC2_HOST }} # EC2의 주소
          username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username
          key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 Key 파일의 내부 텍스트
          source: "rusharp-server-SNAPSHOT.jar" # 복사할 파일 경로
          target: "/home/ubuntu/rusharp-server/tobe" # 나중에 변경될 프로젝트 파일 경로
      
      - name: SSH 로 EC2에 접속
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }} # EC2의 주소
          username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username
          key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 Key 파일의 내부 텍스트
          script_stop: true # 아래 script 중 실패하는 명령이 하나라도 있으면 실패로 처리
          script: |
            rm -rf /home/ubuntu/rusharp-server/current # 기존 환경변수 파일 삭제
            mkdir /home/ubuntu/rusharp-server/current

            # tobe 폴더에 복사된 jar 파일을 current 폴더로 이동
            mv /home/ubuntu/rusharp-server/tobe/rusharp-server-SNAPSHOT.jar /home/ubuntu/rusharp-server/current/rusharp-server-SNAPSHOT.jar
            cd /home/ubuntu/rusharp-server/current
            sudo fuser -k -n tcp 8080 || true
            nohup java -jar rusharp-server-SNAPSHOT.jar > ./output.log 2>&1 &
            rm -rf /home/ubuntu/rusharp-server/tobe/*

 

일단 전체 명령어는 위와 같다.

하나하나 차례대로 살펴보자면

github repository에 있는 소스 코드를 Github Actions 컴퓨터로 불러온 뒤

ls 를 통해 현재 경로 하위의 파일과 폴더를 확인하고 pwd 로 현재 경로를 확인한다.

프로젝트 빌드에 필요한 Java개발 환경을 설치한다.

gitignore 에 포함된 application.properties 내용을 Github Secrets 에서 가져와서 빌드하기 전에 직접 파일로 만든다.

실제 프로젝트를 빌드하는 핵심 단계로 기존의 빌드 흔적을 지운 뒤 코드를 컴파일 한 뒤 실행 가능한 JAR파일을 만든다.

빌드된 파일 이름을 관리하기 쉬운 고정 이름으로 변경하여 배포 스크립트에서 파일명 관리를 편리하게 만든다.

 

이후 EC2에 해당 jar 파일을 실제 운영 서버인 EC2로 전송한다.

 

참고로 /home/ubuntu/rusharp-server/current 폴더에 있는 서버는 실행중인 상태로 해당 폴더에

동일한 파일을 옮길 수 없어서 tobe라는 임시 폴더에 jar파일을 옮긴 뒤 추후 삭제한다.  

마지막으로 SSH로 EC2에 접속한 뒤에 기존 배포 폴더를 정리하고 새로 만든다.

 

일단 그전에 jar 파일이 있는 current 폴더를 삭제한 뒤 동일한 경로의 폴더를 새로 생성한다.

 

이후 tobe 폴더의 jar파일을 current 폴더로 이동하고 현재 진행중인 서버를 강제 종료시킨 다음에

새 서버를 실행시킨 뒤 마지막으로 임시로 썼던 tobe 폴더를 삭제함으로써 배포를 완료한다.

git update-index --chmod=+x gradlew
git add gradlew
git commit -m "Add execute permission to gradlew"
git push origin main

 

참고로 간혹 "./gradlew: Permission denied" 에러가 나오는 경우가 있는데,

그럴 땐 git bash에서 >아래 명령어를 입력하여 git index 의 gradlew 파일을 실행 가능 상태로 변경해야 한다.

 

마지막으로 다시 정리하자면 일반 프로젝트에서 동작되는 구축 방식은 아래와 같다.

jobs의 name 기준으로 "Github Repository 에 올린 파일들을 불러오기" 부터

"Test and Build with Gradle"까지 Github Actions 안에서 실제 빌드 파일을 생성한다.

 

두번째로 "SCP로 빌드된 파일을 EC2로 복사"에서 빌드 파일을 EC2로 복사하고,

"SSH 로 EC2에 접속" 에서 ssh 로 EC2에 접속하여 배포 스크립트를 진행까지 해보았다.

 

다음에는 Docker 까지 활용해서 CI/CD 프로세스를 구축해 볼 예정이다.

저작자표시 비영리 (새창열림)

'Server&load > CI CD' 카테고리의 다른 글

컨테이너 기반의 프로젝트에서 많이 사용되는 CI/CD 구축하기  (1) 2026.01.18
container 기반의 프로젝트 CI/CD 구축 방법 (Docker)  (0) 2026.01.11
개인 프로젝트에서 쓰이는 CI/CD 구축 방법 실습하기  (0) 2025.12.28
프로젝트 특징별 주로 사용되는 CI/CD 구축 방법  (0) 2025.06.25
Github Actions 기본 문법 및 사용 방법 정리  (0) 2025.06.24
'Server&load/CI CD' 카테고리의 다른 글
  • 컨테이너 기반의 프로젝트에서 많이 사용되는 CI/CD 구축하기
  • container 기반의 프로젝트 CI/CD 구축 방법 (Docker)
  • 개인 프로젝트에서 쓰이는 CI/CD 구축 방법 실습하기
  • 프로젝트 특징별 주로 사용되는 CI/CD 구축 방법
몽자비루
몽자비루
QA에 대한것을 공부하기 위한 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • python (32)
        • python_selenium (17)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (33)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
        • 제4회 QA conference (3)
      • 에러일기 (1)
      • Server&load (39)
        • AWS (27)
        • load test (5)
        • CI CD (7)
        • Jmeter (0)
      • RAG 을 활용하여 LLM 만들어보기 (12)
      • git&github (7)
      • 개인 프로젝트 웹사이트 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스터디
    cka
    application log
    로스트아크
    API
    로스트아크api
    테스트 결과보고서
    postman
    qa 컨퍼런스
    linux
    도커
    포스트맨
    네트워크 테스트
    쿠버네티스
    qa
    python
    애플리케이션로그
    리눅스
    LOSTARK
    QAKOREA
    공존성테스트
    테스트스크립트
    qa conference
    개발자에서아키텍트로
    .cpu
    k8s
    vi에디터
    e2c
    사드웨어리소스
    앱공존성
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
몽자비루
일반 프로젝트에서 쓰이는 CI/CD 구축 방식
상단으로

티스토리툴바