CI/CD 파이프라인 구축으로 배포 자동화하기 - EC2와 Github Actions 연동

2025. 9. 19. 14:49·서버&인프라/Cloud

 

 

 

개요

  • EC2에 배포한 .jar를 github actions와 연동하여 CI/CD 자동화 파이프라인을 구축한다.
  • CI (Continuous Integration, 지속적 통합)
    • 중앙 저장소에 통합하고, 자동으로 빌드·테스트해서 문제가 없는지 확인하는 과정
  • CD Continuous Delivery (지속적 제공), Continuous Deployment (지속적 배포)
    • 운영 배포까지도 자동화
    • 코드 푸시 → 빌드 → 테스트 → 운영 서버 반영까지 전부 자동

 

 

 

EC2 배포 과정은 아래 글 참고

 

AWS EC2에 Spring boot+React 프로젝트 배포하기

배포 방식.jar 를 AWS EC2에 배포 java -jar app.jar → 바로 실행 가능 (EC2에서 아주 간단) EC2 생성AWS 가입 및 로그인EC2 선택 후 인스턴스 시작 인스턴스 기본 정보 입력인스턴스 이름 입력OS : Amazon Linux

oeuni.tistory.com

 

 

 

PuTTY에 java 설치

sudo amazon-linux-extras enable corretto17
sudo yum install -y java-17-amazon-corretto
java -version

 

 

 

 

.jar 백그라운드 실행

  • .jar가 있는 위치로 이동하여 nohup 명령어 실행
  • 새 JAR을 백그라운드에서 실행, 로그는  log.txt 에 저장
  •  nohup  : no hang up의 줄임말, 터미널을 꺼도 프로세스가 계속 실행됨
    • 👉 즉, EC2에서 로그아웃해도 서버가 살아있음
cd /home/ec2-user/
nohup java -jar exam-0.0.1-SNAPSHOT.jar > log.txt 2>&1 &

 

 

 

 

 

GitHub Secrets 설정

GitHub → repository 선택→ Settings → Secrets and variables → Actions → New repository secret 에서 3가지 등록

  •  EC2_HOST  → EC2 퍼블릭 IP (예: 13.39.xx.xx)
  •  EC2_USER  → ec2-user (Amazon Linux) 또는 ubuntu (Ubuntu 서버일 경우)
  •  EC2_SSH_KEY  → .pem 파일 내용을 그대로 붙여넣기

 

 

 

GitHub Actions 워크플로우 작성

name: Deploy to EC2

on:
  push:
    branches:
      - master   # master 브랜치에 push 시 배포 실행

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      # 1. 레포지토리 코드 가져오기
      - name: Checkout code
        uses: actions/checkout@v3

      # 2. JDK 17 세팅
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

      # 2-1. Node.js 설치
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'


      # 3. 실행권한 부여 및 Gradle 빌드 (jar 생성)
      - name: Make Gradle Wrapper executable
        run: chmod +x ./gradlew
  
      - name: Build with Gradle
        run: ./gradlew clean build -x test --no-daemon -Dorg.gradle.jvmargs="-Xmx1024m"

      # 4. EC2 서버에 .jar 파일 복사
      - name: Copy jar to EC2
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ec2-user
          key: ${{ secrets.EC2_SSH_KEY }}
          source: "build/libs/exam-0.0.1-SNAPSHOT.jar"
          target: "/home/ec2-user/"

      # 5. EC2 서버에서 실행 (기존 프로세스 종료 후 새로 실행, 스크립트 이용)
      - name: Restart app on EC2
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ec2-user
          key: ${{ secrets.EC2_SSH_KEY }}
          script: /home/ec2-user/deploy.sh

 

 

 

진행 흐름

  1. 작업 후 master 브랜치에 푸쉬
  2. actions 실행
  3. 레포지토리 코드 가져오기
  4. JDK 17 세팅
  5. Node.js 설치
  6. Gradle 빌드
  7. EC2 서버에 .jar 파일 복사
  8. EC2 서버에서 .jar 백그라운드 실행
  9. actions 종료

 

 

EC2에서 실행 스크립트 작성

vi deploy.sh

 

 

i 누르고 아래 내용 복붙하기

#!/bin/bash

# 기존 실행 중인 jar 종료
pids=$(pgrep -f "exam-0.0.1-SNAPSHOT.jar")
if [ -n "$pids" ]; then
  kill -9 $pids
fi

# 새로 실행 (setsid + nohup, 백그라운드, 로그 저장)
setsid nohup java -Xms128m -Xmx512m -jar /home/ec2-user/exam-0.0.1-SNAPSHOT.jar \
  > /home/ec2-user/app.log 2>&1 < /dev/null &

작성 후 ESC → :wq 입력 →  Enter

 

 

스크립트에 실행 권한 부여

chmod +x /home/ec2-user/deploy.sh

 

 


 

 

 

테스트

 

테스트를 위해 게시글 목록 헤더 양옆에 리본을 추가하고 커밋해본다.

 

 

 

 

 

actions가 정상 실행 완료됨을 확인

 

 

 

 

서버에서도 반영된 것을 볼 수 있다.

 

 

 

 

 

'서버&인프라 > Cloud' 카테고리의 다른 글

github Actions process exited with status 137 from signal kill 에러 해결방법  (0) 2025.09.19
AWS RDS가 PuTTY에선 연결되지만 workbench 연결 안 되는 오류  (0) 2025.09.16
AWS EC2에 Spring boot+React 프로젝트 배포하기  (0) 2025.09.16
Google Cloud Run으로 배포한 서비스를 가비아 도메인과 연결하기  (0) 2025.01.10
docker 이미지를 Google Cloud Run에 배포하기  (0) 2025.01.09
'서버&인프라/Cloud' 카테고리의 다른 글
  • github Actions process exited with status 137 from signal kill 에러 해결방법
  • AWS RDS가 PuTTY에선 연결되지만 workbench 연결 안 되는 오류
  • AWS EC2에 Spring boot+React 프로젝트 배포하기
  • Google Cloud Run으로 배포한 서비스를 가비아 도메인과 연결하기
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (17)
        • Spring (6)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (4)
        • 정보처리기사 (1)
        • AICE (3)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    리액트
    react
    오블완
    머신러닝
    알고리즘
    tomcat
    Spring
    AICE
    클라우드
    websquare
    MySQL
    백준
    cloud DB
    google cloud run
    웹스퀘어
    EC2
    Apache
    db
    SpringBoot
    dockerspring
    클라우드 배포
    톰캣
    AI
    티스토리챌린지
    docker배포
    docker
    백준자바
    AICE Associate
    자바
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
CI/CD 파이프라인 구축으로 배포 자동화하기 - EC2와 Github Actions 연동
상단으로

티스토리툴바