1+ name : Build and Deploy
2+
3+ on :
4+ push :
5+ branches : [ "cicd", "main" ]
6+
7+ jobs :
8+ build :
9+ runs-on : ubuntu-latest
10+ steps :
11+ # Git ์ ์ฅ์ ์ฒดํฌ์์
12+ - uses : actions/checkout@v3
13+
14+ # JDK 17 ์ค์
15+ - name : Set up JDK 17
16+ uses : actions/setup-java@v3
17+ with :
18+ java-version : ' 17'
19+ distribution : ' temurin'
20+
21+ # Gradle ์บ์ฑ (๋น๋ ์๊ฐ ๋จ์ถ)
22+ - name : Gradle Caching
23+ uses : actions/cache@v3
24+ with :
25+ path : |
26+ ~/.gradle/caches
27+ ~/.gradle/wrapper
28+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
29+ restore-keys : |
30+ ${{ runner.os }}-gradle-
31+
32+ # Gradle ์คํ ๊ถํ ๋ถ์ฌ
33+ - name : Grant execute permission for gradlew
34+ run : chmod +x gradlew
35+
36+ # Gradle ๋น๋
37+ - name : Build with Gradle
38+ run : ./gradlew clean build -x test
39+
40+ # Docker Hub ๋ก๊ทธ์ธ
41+ - name : Docker Hub Login
42+ uses : docker/login-action@v2
43+ with :
44+ username : ${{ secrets.DOCKER_USERNAME }}
45+ password : ${{ secrets.DOCKER_PASSWORD }}
46+
47+ # Docker ๋น๋, ํธ์ฌ
48+ - name : Docker Build & Push Docker Image
49+ run : |
50+ echo "๐ณ Building Docker image"
51+ docker build -t ${{ secrets.MY_DOCKER_ID }}/graduate:latest .
52+
53+ echo "๐ Pushing Docker image"
54+ docker push ${{ secrets.MY_DOCKER_ID }}/graduate:latest
55+
56+ deploy :
57+ runs-on : ubuntu-latest
58+ needs : build
59+ steps :
60+ # ๊นํ๋ธ ๋ ํฌ์งํ ๋ฆฌ ์ฝ๋ ๋ค์ด๋ก๋
61+ - name : Checkout repository
62+ uses : actions/checkout@v4
63+
64+ # ํ์ผ ๋ณต์ฌ
65+ - name : Copy docker-compose.yml to Server
66+ uses : appleboy/scp-action@master
67+ with :
68+ host : ${{ secrets.SERVER_IP }}
69+ username : ${{ secrets.USERNAME }}
70+ key : ${{ secrets.PRIVATE_KEY }}
71+ source : " docker-compose.yml,prometheus.yml"
72+ target : " ~/app/" # ์๋ฒ์ ์ ์ฅ ๊ฒฝ๋ก
73+
74+ # ์๋ฒ์ ๋ฐฐํฌ
75+ - name : Deploy to Server
76+ uses : appleboy/ssh-action@master
77+ with :
78+ host : ${{ secrets.SERVER_IP }} # EC2 ํผ๋ธ๋ฆญ IP
79+ username : ${{ secrets.USERNAME }} # ํ์๋ฒ SSH ๊ณ์ (ex: ubuntu)
80+ key : ${{ secrets.PRIVATE_KEY }} # PEM ํค
81+ script : |
82+ cd ~/app
83+
84+ # Create .env file
85+ printf "${{ secrets.ENV_FILE }}" > .env
86+
87+ # 1๏ธโฃ ์ต์ Docker ์ด๋ฏธ์ง ํ
88+ docker compose pull
89+ # 2๏ธโฃ ์ด์ ์ปจํ
์ด๋ ์ญ์
90+ docker compose down
91+ # 3๏ธโฃ ์ปจํ
์ด๋์ ์๋น์ค๋ฅผ Docker Compose๋ก ์คํ
92+ docker compose up -d
93+ # 4๏ธโฃ ๋ถํ์ํ ์ด๋ฏธ์ง ์ญ์
94+ docker image prune -f
0 commit comments