Skip to content

Commit e619c3e

Browse files
authored
refactor: application 추적에 다른 CICD 파이프라인 수정 & JWT 토큰 개별화로 클라이언트 접근 방지 (#163)
* feat: 애플리케이션 환경 설정 파일 추가 및 .gitignore 수정 - application-dev.yml, application-local.yml, application-prod.yml, application-test.yml 파일 추가 - .gitignore에서 애플리케이션 파일 관련 항목 제거 * feat: Swagger UI 경로 수정 - Swagger UI의 경로를 "/swagger-ui.html"로 변경하여 리소스 접근을 개선함. * feat: 개별 배포 테스트를 위한 GitHub Actions 워크플로우 추가 - 새로운 워크플로우 파일인 individual-deploy-test.yml을 추가하여 pull request 시 자동으로 배포 테스트를 수행하도록 설정. - 개발 환경에 맞춘 JDK 설정, Gradle 캐싱, Docker 빌드 및 배포 스크립트를 포함함. - application-dev.yml, application-local.yml, application-prod.yml 파일에서 JWT 비밀 키를 환경별로 수정함. * feat: GitHub Actions 워크플로우에서 브랜치 이름 수정 및 환경별 설정 개선 - dev 브랜치 이름을 'develop'으로 변경 - dev 및 prod 프로파일 활성화 시 환경별 application.yml 파일 생성 방식 개선 - Docker 실행 시 환경 변수 추가로 보안 및 설정 강화 * refactor: 개발 및 운영 서버 배포를 위한 GitHub Actions 워크플로우 추가 - 새로운 워크플로우 파일을 추가하여 main 및 develop 브랜치에 대한 CI/CD 파이프라인을 설정. - 환경별 application.yml 파일을 자동으로 생성하도록 구성. - Docker 이미지 빌드 및 푸시, 서버 배포를 위한 단계 포함.
1 parent a6fd8ad commit e619c3e

10 files changed

Lines changed: 578 additions & 121 deletions

File tree

.github/workflows/deploy-test.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Develop 브랜치 CI/CD 테스트
2+
3+
on:
4+
pull_request:
5+
branches: [ "develop" ]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
test-develop-cicd:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: 소스 코드 체크아웃
15+
uses: actions/checkout@v3
16+
17+
- name: JDK 17 설정
18+
uses: actions/setup-java@v3
19+
with:
20+
java-version: '17'
21+
distribution: 'temurin'
22+
23+
- name: Gradle 캐싱
24+
uses: actions/cache@v3
25+
with:
26+
path: |
27+
~/.gradle/caches
28+
~/.gradle/wrapper
29+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
30+
restore-keys: |
31+
${{ runner.os }}-gradle-
32+
33+
- name: application.yml 생성
34+
run: |
35+
echo "spring:
36+
profiles:
37+
include: dev" > ./src/main/resources/application.yml
38+
shell: bash
39+
40+
- name: gradlew 실행 권한 부여
41+
run: chmod +x gradlew
42+
43+
- name: Gradle 빌드
44+
run: ./gradlew clean build -x test
45+
46+
- name: Docker Hub 로그인
47+
uses: docker/login-action@v2
48+
with:
49+
username: ${{ secrets.DOCKER_USERNAME }}
50+
password: ${{ secrets.DOCKER_PASSWORD }}
51+
52+
- name: Docker 이미지 빌드 및 푸시
53+
run: |
54+
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev .
55+
docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev
56+
57+
- name: 개발 서버에 배포
58+
uses: appleboy/ssh-action@master
59+
id: deploy-dev
60+
with:
61+
host: ${{ secrets.HOST_DEV }}
62+
username: ${{ secrets.USERNAME }}
63+
port: 22
64+
key: ${{ secrets.DEV_PRIVATE_KEY }}
65+
script: |
66+
sudo docker ps
67+
sudo docker rm -f $(docker ps -qa)
68+
sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev
69+
sudo docker run -d -p 9000:9000 \
70+
-e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \
71+
-e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \
72+
-e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \
73+
-e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \
74+
-e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \
75+
-e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \
76+
-e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \
77+
${{ secrets.DOCKER_REPO }}/eatssu-dev
78+
sudo docker image prune -f

.github/workflows/deploy.yml

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인
2+
3+
on:
4+
push:
5+
branches: [ "main", "develop" ]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
CI-CD:
12+
name: CI/CD
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v3
16+
- name: JDK 17 설치
17+
uses: actions/setup-java@v3
18+
with:
19+
java-version: '17'
20+
distribution: 'temurin'
21+
22+
- name: Gradle 캐싱
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+
- name: dev 프로필 설정
33+
if: contains(github.ref, 'dev')
34+
run: |
35+
echo "spring:
36+
profiles:
37+
include: dev" > ./src/main/resources/application.yml
38+
shell: bash
39+
40+
- name: prod 프로필 설정
41+
if: contains(github.ref, 'main')
42+
run: |
43+
echo "spring:
44+
profiles:
45+
include: prod" > ./src/main/resources/application.yml
46+
shell: bash
47+
48+
- name: gradlew 실행 권한 부여
49+
run: chmod +x gradlew
50+
51+
- name: Gradle로 빌드
52+
run: ./gradlew clean build -x test
53+
54+
- name: Docker Hub 로그인
55+
uses: docker/login-action@v2
56+
with:
57+
username: ${{ secrets.DOCKER_USERNAME }}
58+
password: ${{ secrets.DOCKER_PASSWORD }}
59+
60+
- name: prod 용 Docker 빌드 및 푸시
61+
if: contains(github.ref, 'main')
62+
run: |
63+
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod .
64+
docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod
65+
66+
- name: dev 서버 용 Docker 빌드 및 푸시
67+
if: contains(github.ref, 'dev')
68+
run: |
69+
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev .
70+
docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev
71+
72+
- name: prod에 배포
73+
uses: appleboy/ssh-action@master
74+
id: deploy-prod
75+
if: contains(github.ref, 'main')
76+
with:
77+
host: ${{ secrets.HOST_PROD }}
78+
username: ubuntu
79+
key: ${{ secrets.PROD_PRIVATE_KEY }}
80+
envs: GITHUB_SHA
81+
script: |
82+
sudo docker ps
83+
sudo docker rm -f $(docker ps -qa)
84+
sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod
85+
sudo docker run -d -p 9000:9000 \
86+
-e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \
87+
-e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \
88+
-e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \
89+
-e EATSSU_JWT_SECRET_PROD="${{ secrets.EATSSU_JWT_SECRET_PROD }}" \
90+
-e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \
91+
-e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \
92+
-e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \
93+
${{ secrets.DOCKER_REPO }}/eatssu-prod
94+
sudo docker image prune -f
95+
96+
- name: dev 서버에 배포
97+
uses: appleboy/ssh-action@master
98+
id: deploy-dev
99+
if: contains(github.ref, 'dev')
100+
with:
101+
host: ${{ secrets.HOST_DEV }}
102+
username: ${{ secrets.USERNAME }}
103+
port: 22
104+
key: ${{ secrets.DEV_PRIVATE_KEY }}
105+
script: |
106+
sudo docker ps
107+
sudo docker rm -f $(docker ps -qa)
108+
sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev
109+
sudo docker run -d -p 9000:9000 \
110+
-e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \
111+
-e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \
112+
-e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \
113+
-e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \
114+
-e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \
115+
-e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \
116+
-e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \
117+
${{ secrets.DOCKER_REPO }}/eatssu-dev
118+
sudo docker image prune -f

.github/workflows/gradle.yml

Lines changed: 0 additions & 112 deletions
This file was deleted.

.gitignore

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,6 @@ out/
3636
### VS Code ###
3737
.vscode/
3838

39-
### application files ###
40-
application.yml
41-
application-local.yml
42-
application-dev.yml
43-
application-test.yml
44-
application-prod.yml
45-
46-
4739
### Generated files ###
4840
/src/main/generated/
4941

src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@RequiredArgsConstructor
2424
public class SecurityConfig {
2525
private static final String[] RESOURCE_LIST = {
26-
"/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**",
26+
"/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**",
2727
"/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**"
2828
};
2929

0 commit comments

Comments
 (0)