Skip to content

Commit 5838d4a

Browse files
committed
Update CD.yml
1 parent 019dc25 commit 5838d4a

File tree

1 file changed

+54
-151
lines changed

1 file changed

+54
-151
lines changed

.github/workflows/CD.yml

Lines changed: 54 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,76 @@
1-
name: CD with Gradle
1+
name: backend cd
22

33
on:
44
push:
5-
branches: [ "main", "dev" ]
5+
branches: [ main, dev ]
6+
7+
concurrency:
8+
group: ${{ github.workflow }}-${{ github.ref }}
9+
cancel-in-progress: true
10+
11+
env:
12+
DOCKER_IMAGE_REPO: ${{ secrets.DOCKER_IMAGE_REPO }} # ex) hyuneun/crame
613

714
jobs:
8-
deploy:
15+
build:
916
runs-on: ubuntu-latest
10-
1117
steps:
1218
- uses: actions/checkout@v4
1319

14-
- name: Set up JDK 21
20+
- name: Set up JDK 17
1521
uses: actions/setup-java@v4
1622
with:
17-
java-version: '21'
18-
distribution: 'temurin'
19-
20-
- name: Create application.yml with secrets (dev)
21-
if: github.ref == 'refs/heads/dev'
22-
run: |
23-
mkdir -p src/main/resources
24-
echo "spring:" >> src/main/resources/application.yml
25-
echo " jwt:" >> src/main/resources/application.yml
26-
echo " secret: \"${{ secrets.JWT_SECRET }}\"" >> src/main/resources/application.yml
27-
echo " access-token-duration: 10D" >> src/main/resources/application.yml
28-
echo " refresh-token-duration: 100D" >> src/main/resources/application.yml
29-
echo " security:" >> src/main/resources/application.yml
30-
echo " oauth2:" >> src/main/resources/application.yml
31-
echo " client:" >> src/main/resources/application.yml
32-
echo " registration:" >> src/main/resources/application.yml
33-
echo " google:" >> src/main/resources/application.yml
34-
echo " client-id: \"${{ secrets.GOOGLE_CLIENT_ID }}\"" >> src/main/resources/application.yml
35-
echo " client-secret: \"${{ secrets.GOOGLE_CLIENT_SECRET }}\"" >> src/main/resources/application.yml
36-
echo " scope:" >> src/main/resources/application.yml
37-
echo " - email" >> src/main/resources/application.yml
38-
echo " - profile" >> src/main/resources/application.yml
39-
echo " redirect-uri: https://dev.crame.site/login/oauth2/code/google" >> src/main/resources/application.yml
40-
echo " data:" >> src/main/resources/application.yml
41-
echo " mongodb:" >> src/main/resources/application.yml
42-
echo " uri: \"${{ secrets.MONGO_URI_DEV }}\"" >> src/main/resources/application.yml
43-
echo " redis:" >> src/main/resources/application.yml
44-
echo " host: redis" >> src/main/resources/application.yml
45-
echo " port: 6379" >> src/main/resources/application.yml
46-
echo " password: \"${{ secrets.REDIS_PASSWORD }}\"" >> src/main/resources/application.yml
47-
echo " mail:" >> src/main/resources/application.yml
48-
echo " host: smtp.gmail.com" >> src/main/resources/application.yml
49-
echo " port: 587" >> src/main/resources/application.yml
50-
echo " username: \"${{ secrets.MAIL_USERNAME }}\"" >> src/main/resources/application.yml
51-
echo " password: \"${{ secrets.MAIL_PASSWORD }}\"" >> src/main/resources/application.yml
52-
echo " properties:" >> src/main/resources/application.yml
53-
54-
echo " mail.smtp.auth: true" >> src/main/resources/application.yml
55-
echo " mail.smtp.starttls.enable: true" >> src/main/resources/application.yml
56-
echo " mail.smtp.connectiontimeout: 5000" >> src/main/resources/application.yml
57-
echo " mail.smtp.timeout: 5000" >> src/main/resources/application.yml
58-
echo " mail.smtp.writetimeout: 5000" >> src/main/resources/application.yml
59-
echo " mail.mime.charset: UTF-8" >> src/main/resources/application.yml
60-
echo " default-encoding: UTF-8" >> src/main/resources/application.yml
23+
java-version: '17'
24+
distribution: temurin
6125

62-
echo "app:" >> src/main/resources/application.yml
63-
echo " secrets:" >> src/main/resources/application.yml
64-
echo " master-key-base64: \"${{ secrets.MASTER_KEY_BASE64 }}\"" >> src/main/resources/application.yml
65-
echo " key-version: kv1" >> src/main/resources/application.yml
66-
echo " mail:" >> src/main/resources/application.yml
67-
echo " from: \"${{ secrets.MAIL_USERNAME }}\"" >> src/main/resources/application.yml
68-
echo " from-personal: \"CRAME\"" >> src/main/resources/application.yml
26+
- name: Build (skip tests)
27+
run: ./gradlew build -x test
6928

70-
echo "otp:" >> src/main/resources/application.yml
71-
echo " ttl-seconds: 300" >> src/main/resources/application.yml
72-
echo " cooldown-seconds: 60" >> src/main/resources/application.yml
73-
echo " max-attempts: 5" >> src/main/resources/application.yml
74-
echo " rate:" >> src/main/resources/application.yml
75-
echo " window-seconds: 60" >> src/main/resources/application.yml
76-
echo " max-per-window: 6" >> src/main/resources/application.yml
77-
echo "springdoc:" >> src/main/resources/application.yml
78-
echo " swagger-ui:" >> src/main/resources/application.yml
79-
echo " path: /swagger-ui.html" >> src/main/resources/application.yml
80-
echo " default-server-url: https://dev.crame.site" >> src/main/resources/application.yml
81-
echo " servers:" >> src/main/resources/application.yml
82-
echo " - url: https://dev.crame.site" >> src/main/resources/application.yml
83-
84-
- name: Print application.yml (dev)
85-
if: github.ref == 'refs/heads/dev'
86-
run: |
87-
echo "====== DEV application.yml ======"
88-
cat src/main/resources/application.yml
89-
90-
- name: Create application.yml with secrets (main)
91-
if: github.ref == 'refs/heads/main'
92-
run: |
93-
mkdir -p src/main/resources
94-
echo "spring:" >> src/main/resources/application.yml
95-
echo " jwt:" >> src/main/resources/application.yml
96-
echo " secret: \"${{ secrets.JWT_SECRET }}\"" >> src/main/resources/application.yml
97-
echo " access-token-duration: 10D" >> src/main/resources/application.yml
98-
echo " refresh-token-duration: 100D" >> src/main/resources/application.yml
99-
echo " security:" >> src/main/resources/application.yml
100-
echo " oauth2:" >> src/main/resources/application.yml
101-
echo " client:" >> src/main/resources/application.yml
102-
echo " registration:" >> src/main/resources/application.yml
103-
echo " google:" >> src/main/resources/application.yml
104-
echo " client-id: \"${{ secrets.GOOGLE_CLIENT_ID }}\"" >> src/main/resources/application.yml
105-
echo " client-secret: \"${{ secrets.GOOGLE_CLIENT_SECRET }}\"" >> src/main/resources/application.yml
106-
echo " scope:" >> src/main/resources/application.yml
107-
echo " - email" >> src/main/resources/application.yml
108-
echo " - profile" >> src/main/resources/application.yml
109-
echo " redirect-uri: https://crame.site/login/oauth2/code/google" >> src/main/resources/application.yml
110-
echo " data:" >> src/main/resources/application.yml
111-
echo " mongodb:" >> src/main/resources/application.yml
112-
echo " uri: \"${{ secrets.MONGO_URI }}\"" >> src/main/resources/application.yml
113-
echo " redis:" >> src/main/resources/application.yml
114-
echo " host: redis" >> src/main/resources/application.yml
115-
echo " port: 6379" >> src/main/resources/application.yml
116-
echo " password: \"${{ secrets.REDIS_PASSWORD }}\"" >> src/main/resources/application.yml
117-
echo " mail:" >> src/main/resources/application.yml
118-
echo " host: smtp.gmail.com" >> src/main/resources/application.yml
119-
echo " port: 587" >> src/main/resources/application.yml
120-
echo " username: \"${{ secrets.MAIL_USERNAME }}\"" >> src/main/resources/application.yml
121-
echo " password: \"${{ secrets.MAIL_PASSWORD }}\"" >> src/main/resources/application.yml
122-
echo " properties:" >> src/main/resources/application.yml
123-
echo " mail.smtp.auth: true" >> src/main/resources/application.yml
124-
echo " mail.smtp.starttls.enable: true" >> src/main/resources/application.yml
125-
echo " mail.smtp.connectiontimeout: 5000" >> src/main/resources/application.yml
126-
echo " mail.smtp.timeout: 5000" >> src/main/resources/application.yml
127-
echo " mail.smtp.writetimeout: 5000" >> src/main/resources/application.yml
128-
echo " mail.mime.charset: UTF-8" >> src/main/resources/application.yml
129-
echo " default-encoding: UTF-8" >> src/main/resources/application.yml
130-
131-
echo "app:" >> src/main/resources/application.yml
132-
echo " secrets:" >> src/main/resources/application.yml
133-
echo " master-key-base64: \"${{ secrets.MASTER_KEY_BASE64 }}\"" >> src/main/resources/application.yml
134-
echo " key-version: kv1" >> src/main/resources/application.yml
135-
echo " mail:" >> src/main/resources/application.yml
136-
echo " from: \"${{ secrets.MAIL_USERNAME }}\"" >> src/main/resources/application.yml
137-
echo " from-personal: \"CRAME\"" >> src/main/resources/application.yml
138-
139-
echo "otp:" >> src/main/resources/application.yml
140-
echo " ttl-seconds: 300" >> src/main/resources/application.yml
141-
echo " cooldown-seconds: 60" >> src/main/resources/application.yml
142-
echo " max-attempts: 5" >> src/main/resources/application.yml
143-
echo " rate:" >> src/main/resources/application.yml
144-
echo " window-seconds: 60" >> src/main/resources/application.yml
145-
echo " max-per-window: 6" >> src/main/resources/application.yml
146-
echo "springdoc:" >> src/main/resources/application.yml
147-
echo " swagger-ui:" >> src/main/resources/application.yml
148-
echo " path: /swagger-ui.html" >> src/main/resources/application.yml
149-
150-
- name: Build with Gradle Wrapper
151-
run: |
152-
chmod +x ./gradlew
153-
./gradlew build -x test
29+
- name: Docker login
30+
uses: docker/login-action@v3
31+
with:
32+
username: ${{ secrets.DOCKER_USERNAME }}
33+
password: ${{ secrets.DOCKER_TOKEN }}
15434

155-
- name: Transfer .jar file to EC2
156-
uses: appleboy/scp-action@master
35+
- name: Build & Push image
36+
uses: docker/build-push-action@v6
15737
with:
158-
host: ${{ secrets.SSH_HOST }}
159-
username: ubuntu
160-
key: ${{ secrets.SSH_KEY }}
161-
source: "build/libs/*.jar"
162-
target: "/home/ubuntu/crame"
38+
context: .
39+
push: true
40+
platforms: linux/arm64
41+
tags: |
42+
${{ env.DOCKER_IMAGE_REPO }}:${{ github.ref_name }}
43+
${{ env.DOCKER_IMAGE_REPO }}:${{ github.sha }}
16344
164-
- name: Restart docker compose on EC2
45+
deploy:
46+
needs: build
47+
runs-on: ubuntu-latest
48+
steps:
49+
- name: Deploy on server
16550
uses: appleboy/ssh-action@master
16651
with:
16752
host: ${{ secrets.SSH_HOST }}
16853
username: ubuntu
16954
key: ${{ secrets.SSH_KEY }}
17055
script: |
171-
cd ~/crame
172-
docker compose up -d --build
173-
docker image prune -f
56+
set -e
57+
cd /home/ubuntu/crame
58+
[ -f .env ] || touch .env
59+
60+
# DOCKER_IMAGE_REPO 업데이트
61+
if grep -q '^DOCKER_IMAGE_REPO=' .env; then
62+
sed -i "s|^DOCKER_IMAGE_REPO=.*|DOCKER_IMAGE_REPO=${{ env.DOCKER_IMAGE_REPO }}|" .env
63+
else
64+
echo "DOCKER_IMAGE_REPO=${{ env.DOCKER_IMAGE_REPO }}" >> .env
65+
fi
66+
67+
# 브랜치명(main/dev)으로 태그 업데이트
68+
if grep -q '^DOCKER_IMAGE_TAG=' .env; then
69+
sed -i "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=${{ github.ref_name }}|" .env
70+
else
71+
echo "DOCKER_IMAGE_TAG=${{ github.ref_name }}" >> .env
72+
fi
73+
74+
docker compose pull
75+
docker compose up -d
76+
docker image prune -f

0 commit comments

Comments
 (0)