📝 개요

CI/CD(지속적 통합 및 지속적 배포)는 애플리케이션을 자동으로 빌드, 테스트, 배포하는 개발 프로세스를 의미한다. GitHub Actions를 사용하면 GitHub 저장소에 Push 또는 PR 이벤트가 발생했을 때 워크플로를 실행할 수 있다.

이 문서는 GitHub Actions를 기반으로 한 CI/CD를 직접 구축하고, 내 프로젝트에 적용하는 방법을 단계별로 정리한 내용이다. 무중단 배포에 필요한 구성까지 포함하여 작성하였다.


🔧 1. GitHub Actions란?


🛠️ 2. 기본 CI/CD 구성 흐름

📂 2-1. 디렉토리 및 파일 생성

mkdir -p .github/workflows
cd .github/workflows
touch ci-cd.yml

🧾 2-2. 기본 workflow 예시 (ci-cd.yml)

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew

      - name: Build with Gradle
        run: ./gradlew build

      - name: Copy files via SCP (배포 서버 전송)
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: ${{ secrets.REMOTE_USER }}
          password: ${{ secrets.REMOTE_PASSWORD }}
          port: 22
          source: "build/libs/*.jar"
          target: "~/app"

      - name: Execute remote command (서버 재시작)
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: ${{ secrets.REMOTE_USER }}
          password: ${{ secrets.REMOTE_PASSWORD }}
          port: 22
          script: |
            pkill -f 'java -jar' || true
            nohup java -jar ~/app/*.jar > ~/app/log.txt 2>&1 &


🔐 3. GitHub Secrets 설정

GitHub 저장소 → Settings → Secrets and variables → Actions 메뉴에서 아래의 Key 등록