Skip to content

feat: 커뮤니티 목록 조회에 좋아요 상태(isLiked) 통합 #109

feat: 커뮤니티 목록 조회에 좋아요 상태(isLiked) 통합

feat: 커뮤니티 목록 조회에 좋아요 상태(isLiked) 통합 #109

name: CI-CD (develop → Ncloud)
on:
push:
branches: [ "develop" ] # ✅ develop 브랜치에 머지되면 실행
workflow_dispatch: # ✅ 수동 실행도 가능
concurrency:
group: deploy-helpie-backend-develop
cancel-in-progress: true # 이전 배포 중이면 취소하고 최신 커밋만 실행
jobs:
build:
runs-on: ubuntu-latest
steps:
# 1️⃣ 리포지토리 코드 체크아웃
- uses: actions/checkout@v4
# 2️⃣ JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
cache: gradle
# 3️⃣ Gradle 빌드
- name: Build (Gradle)
run: |
chmod +x gradlew
./gradlew clean build -x test
# 4️⃣ 빌드된 JAR 파일 경로 찾기
- name: Find built JAR
id: artifact
run: |
set -e
JAR=$(ls -1t build/libs/*.jar | grep -v -- '-plain' | head -n1)
echo "Picked JAR: $JAR"
echo "jar=$JAR" >> $GITHUB_OUTPUT
# 5️⃣ JAR 파일 업로드 (Actions 내부 임시 저장)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: app-jar
path: ${{ steps.artifact.outputs.jar }}
deploy:
needs: build
runs-on: ubuntu-latest
env:
APP_DIR: ${{ secrets.APP_DIR }}
JAR_NAME: ${{ secrets.JAR_NAME }}
JAVA_CMD: ${{ secrets.JAVA_CMD }}
steps:
# 6️⃣ JAR 다운로드
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: app-jar
path: .
# 7️⃣ JAR 경로 설정
- name: Pick jar
id: pick
run: |
JAR=$(ls -1 *.jar | head -n1)
echo "Picked JAR: $JAR"
echo "jar=$JAR" >> $GITHUB_OUTPUT
# 8️⃣ 서버에 JAR 복사 (비밀번호 방식)
- name: Copy JAR to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
password: ${{ secrets.SSH_PASSWORD }}
source: ${{ steps.pick.outputs.jar }}
target: ${{ secrets.APP_DIR }}
overwrite: true
# 9️⃣ 서버에서 base64 시크릿으로 application.yml 생성
- name: Create application.yml from base64 secret
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
password: ${{ secrets.SSH_PASSWORD }}
script: |
set -e
cd ${{ secrets.APP_DIR }}
mkdir -p config
# APP_YML_BASE64는 반드시 '한 줄'이어야 합니다.
# echo 대신 printf를 사용해 개행/해석 이슈 방지
printf '%s' "${{ secrets.APP_YML_BASE64 }}" | base64 --decode > config/application.yml
# 확인용(민감정보 노출 방지를 위해 해시만 출력)
sha1sum config/application.yml | awk '{print "application.yml sha1: "$1}'
# 9️⃣ 서버에서 JAR 이름 고정 + 실행 스크립트 호출
- name: Rename and restart app
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
password: ${{ secrets.SSH_PASSWORD }}
script: |
set -e
cd ${{ secrets.APP_DIR }}
# 애플리케이션 재시작 (start.sh 내부에서 ./config/application.yml 사용)
bash ${{ secrets.APP_DIR }}/start.sh