πŸ“Œ GitHub Actions 기반 CI/CD ꡬ성 정리

πŸ“ κ°œμš”

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 등둝