Skip to content

Commit 86757ad

Browse files
authored
Update gradle.yml
1 parent 50f0b9c commit 86757ad

1 file changed

Lines changed: 99 additions & 31 deletions

File tree

.github/workflows/gradle.yml

Lines changed: 99 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,143 @@
1-
name: Deploy with Docker Compose
1+
name: CI/CD with Gradle, Docker Image & Docker Compose
22

33
on:
44
push:
55
branches: [ "main" ]
6+
pull_request:
7+
branches: [ "main" ]
8+
9+
permissions:
10+
contents: read
11+
12+
env:
13+
# Ubuntu VM에서 docker compose 명령 시 sudo 권한이 필요하다면
14+
# 이 변수를 통해 스크립트 내에서 쉽게 참조할 수 있습니다.
15+
DOCKER_COMPOSE_CMD: "sudo docker compose"
616

717
jobs:
8-
deploy:
18+
# ─────────────────────────────────────────────
19+
# 1) Build-and-Push-Image Job
20+
# 이미지를 빌드하고 Docker Hub에 Push
21+
# ─────────────────────────────────────────────
22+
build-and-push-image:
23+
name: Build & Push Docker Image
924
runs-on: ubuntu-latest
1025

1126
steps:
12-
# 1. 레포지토리 체크아웃
27+
# 1.1) 소스 코드 체크아웃
1328
- name: Checkout repository
1429
uses: actions/checkout@v3
1530

16-
# 2. SSH 키 설정
17-
- name: Set up SSH private key
31+
# 1.2) JDK 17 설치
32+
- name: Set up JDK 17
33+
uses: actions/setup-java@v3
34+
with:
35+
java-version: '17'
36+
distribution: 'temurin'
37+
38+
# 1.3) Gradle 실행권한 부여
39+
- name: Grant execute permission for Gradle
40+
run: chmod +x ./gradlew
41+
42+
# 1.4) Gradle로 빌드 (bootJar)
43+
- name: Build with Gradle
44+
run: ./gradlew clean bootJar
45+
46+
# 1.5) Docker 이미지 빌드
47+
- name: Build Docker Image
48+
run: docker build -t ${{ secrets.DOCKER_USERNAME }}/fossistant:latest .
49+
50+
# 1.6) Docker Hub 로그인
51+
- name: Docker Hub Login
52+
uses: docker/login-action@v2
53+
with:
54+
username: ${{ secrets.DOCKER_USERNAME }}
55+
password: ${{ secrets.DOCKER_PASSWORD }}
56+
57+
# 1.7) Docker 이미지 Push
58+
- name: Push Docker Image to Docker Hub
59+
run: docker push ${{ secrets.DOCKER_USERNAME }}/fossistant:latest
60+
61+
# ─────────────────────────────────────────────
62+
# 2) Deploy-with-Compose Job
63+
# 빌드가 끝나면 Azure VM에 SSH 접속 → Compose로 배포
64+
# ─────────────────────────────────────────────
65+
deploy-with-compose:
66+
name: Deploy to Azure VM via Docker Compose
67+
runs-on: ubuntu-latest
68+
needs: build-and-push-image # build-and-push-image가 끝나야 실행됨
69+
70+
steps:
71+
# 2.1) SSH 키 세팅
72+
- name: Setup SSH private key
1873
run: |
1974
echo "${{ secrets.SSH_KEY }}" > private_key.pem
2075
chmod 600 private_key.pem
2176
22-
# 3. .env 파일 생성
77+
# 2.2) SSH 연결 테스트 (디버깅용)
78+
- name: Debug SSH connection
79+
run: |
80+
ssh -o StrictHostKeyChecking=no -i private_key.pem \
81+
${{ secrets.AZURE_VM_USER }}@${{ secrets.AZURE_VM_HOST }} \
82+
"echo ✅ SSH 접속 성공!"
83+
84+
# 2.3) .env 파일 생성
2385
- name: Generate .env for Docker Compose
2486
run: |
25-
echo "AZURE_DB_USERNAME=${{ secrets.AZURE_DB_USERNAME }}" >> .env
26-
echo "AZURE_DB_PASSWORD=${{ secrets.AZURE_DB_PASSWORD }}" >> .env
27-
echo "GEMINI_KEY=${{ secrets.GEMINI_KEY }}" >> .env
28-
echo "GITHUB_TOKEN=${{ secrets.HUB_TOKEN }}" >> .env
29-
echo "JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}" >> .env
30-
echo "JWT_ACCESS_TOKEN_TIME=${{ secrets.JWT_ACCESS_TOKEN_TIME }}" >> .env
31-
echo "JWT_REFRESH_TOKEN_TIME=${{ secrets.JWT_REFRESH_TOKEN_TIME }}" >> .env
32-
echo "GITHUB_CLIENT_ID=${{ secrets.CLIENT_ID }}" >> .env
33-
echo "GITHUB_CLIENT_SECRET=${{ secrets.CLIENT_SECRET }}" >> .env
34-
35-
# 4. docker-compose.yml 업로드
87+
cat <<EOF > .env
88+
AZURE_DB_USERNAME=${{ secrets.AZURE_DB_USERNAME }}
89+
AZURE_DB_PASSWORD=${{ secrets.AZURE_DB_PASSWORD }}
90+
GEMINI_KEY=${{ secrets.GEMINI_KEY }}
91+
GITHUB_TOKEN=${{ secrets.HUB_TOKEN }}
92+
JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
93+
JWT_ACCESS_TOKEN_TIME=${{ secrets.JWT_ACCESS_TOKEN_TIME }}
94+
JWT_REFRESH_TOKEN_TIME=${{ secrets.JWT_REFRESH_TOKEN_TIME }}
95+
GITHUB_CLIENT_ID=${{ secrets.CLIENT_ID }}
96+
GITHUB_CLIENT_SECRET=${{ secrets.CLIENT_SECRET }}
97+
EOF
98+
99+
# 2.4) docker-compose.yml 업로드
36100
- name: Upload docker-compose.yml to Azure VM
37101
run: |
38-
scp -i private_key.pem -o StrictHostKeyChecking=no docker-compose.yml \
102+
scp -i private_key.pem -o StrictHostKeyChecking=no \
103+
docker-compose.yml \
39104
${{ secrets.AZURE_VM_USER }}@${{ secrets.AZURE_VM_HOST }}:/home/ubuntu/fossistant/docker-compose.yml
40105
41-
# 5. .env 업로드
106+
# 2.5) .env 업로드
42107
- name: Upload .env to Azure VM
43108
run: |
44-
scp -i private_key.pem -o StrictHostKeyChecking=no .env \
109+
scp -i private_key.pem -o StrictHostKeyChecking=no \
110+
.env \
45111
${{ secrets.AZURE_VM_USER }}@${{ secrets.AZURE_VM_HOST }}:/home/ubuntu/fossistant/.env
46112
47-
# 6. SSH로 접속하여 배포
48-
- name: SSH to Azure VM and Deploy
113+
# 2.6) SSH로 접속하여 Azure VM에 배포
114+
- name: SSH to Azure VM and Deploy with Compose
49115
uses: appleboy/ssh-action@v0.1.3
50116
with:
51117
host: ${{ secrets.AZURE_VM_HOST }}
52118
username: ${{ secrets.AZURE_VM_USER }}
53119
key: ${{ secrets.SSH_KEY }}
54120
port: 22
55121
script: |
122+
set -eux
123+
56124
cd /home/ubuntu/fossistant
57125
58126
echo "🧼 Killing any process listening on port 6379..."
59-
# (선택 사항) Redis가 사용 중인 포트를 잡고 있는 프로세스 강제 종료
60127
sudo fuser -k 6379/tcp || true
61128
62-
echo "🧼 Forcibly removing existing containers (redis, fossistant) if they exist..."
129+
echo "🧼 Forcibly removing any existing containers named 'redis' or 'fossistant'..."
63130
docker rm -f redis fossistant || true
64131
65132
echo "🧹 Stopping old containers and removing orphans..."
66-
docker compose down --remove-orphans || true
67-
docker compose rm -f || true
133+
$DOCKER_COMPOSE_CMD down --remove-orphans || true
134+
$DOCKER_COMPOSE_CMD rm -f || true
68135
69-
echo "✅ Pulling latest images..."
70-
docker compose pull
136+
echo "✅ Pulling latest images from Docker Hub..."
137+
$DOCKER_COMPOSE_CMD pull
71138
72-
echo "🚀 Starting new containers..."
73-
docker compose up -d --build
139+
echo "🚀 Starting new containers with Docker Compose..."
140+
$DOCKER_COMPOSE_CMD up -d --build
74141
75-
echo "🎉 Deployment complete! Containers are up and running."
142+
echo "🎉 Deployment complete! Current containers:"
143+
docker ps

0 commit comments

Comments
 (0)