Skip to content

Commit d5c759c

Browse files
authored
Merge pull request #13 from Searchweb-Dev/devops/#12
devops: GitHub Actions 기반 CI/CD 테스트
2 parents 7dd3085 + 73c7c2d commit d5c759c

File tree

8 files changed

+189
-4
lines changed

8 files changed

+189
-4
lines changed

.github/workflows/deploy-test.yml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: CI/CD - Searchweb (version.txt 기반)
2+
3+
on:
4+
push:
5+
branches: [ "main", "dev" ]
6+
pull_request:
7+
branches: [ "main", "dev" ]
8+
9+
jobs:
10+
build-and-push:
11+
name: Build & Push Docker Image
12+
runs-on: ubuntu-latest
13+
14+
outputs:
15+
image_tag: ${{ steps.meta.outputs.IMAGE_TAG }}
16+
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v4
20+
21+
- name: Read version.txt
22+
id: meta
23+
run: |
24+
VERSION=$(cat version.txt | tr -d ' \n')
25+
echo "IMAGE_TAG=${VERSION}" >> $GITHUB_OUTPUT
26+
27+
- name: Set up JDK 17
28+
uses: actions/setup-java@v4
29+
with:
30+
distribution: 'temurin'
31+
java-version: '17'
32+
33+
- name: Grant execute permission
34+
run: chmod +x ./gradlew
35+
36+
- name: Build JAR
37+
run: ./gradlew clean bootJar
38+
39+
- name: Docker Login
40+
uses: docker/login-action@v3
41+
with:
42+
username: ${{ secrets.DOCKERHUB_USERNAME }}
43+
password: ${{ secrets.DOCKERHUB_TOKEN }}
44+
45+
- name: Docker Build (version + latest)
46+
run: |
47+
docker build \
48+
-t ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${{ steps.meta.outputs.IMAGE_TAG }} \
49+
-t ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest \
50+
.
51+
52+
- name: Docker Push
53+
run: |
54+
docker push ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${{ steps.meta.outputs.IMAGE_TAG }}
55+
docker push ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
56+
57+
deploy:
58+
name: Deploy to OCI
59+
runs-on: ubuntu-latest
60+
needs: build-and-push
61+
62+
env:
63+
IMAGE_TAG: ${{ needs.build-and-push.outputs.image_tag }}
64+
65+
steps:
66+
- name: Prepare SSH key
67+
run: |
68+
mkdir -p ~/.ssh
69+
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
70+
chmod 600 ~/.ssh/id_rsa
71+
72+
- name: Add Known Hosts
73+
run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
74+
75+
- name: Deploy via SSH
76+
run: |
77+
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
78+
docker login -u '${{ secrets.DOCKERHUB_USERNAME }}' -p '${{ secrets.DOCKERHUB_TOKEN }}'
79+
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${IMAGE_TAG}
80+
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
81+
82+
# 기존 컨테이너 강제 삭제 (있으면 지우고, 없으면 에러 무시)
83+
docker rm -f searchweb 2>/dev/null || true
84+
85+
# 새 컨테이너 실행
86+
docker run -d \
87+
--env SPRING_PROFILES_ACTIVE=dev \
88+
--env-file /home/ubuntu/Searchweb/.env \
89+
-p 8080:8080 \
90+
--name searchweb \
91+
${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
92+
EOF

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ bin/
1919

2020

2121
### Ignore application.properties ###
22-
application.properties
23-
application-*.properties
2422
.env
2523

2624

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
FROM openjdk:17-jdk-slim
1+
FROM eclipse-temurin:17-jre-alpine
22
COPY build/libs/SearchWeb-0.0.1-SNAPSHOT.jar app.jar
3-
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]
3+
ENTRYPOINT ["java", "-jar", "app.jar"]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Dev mysql settings
2+
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3+
spring.datasource.url=${DEV_DB_URL}
4+
spring.datasource.username=${DEV_DB_USERNAME}
5+
spring.datasource.password=${DEV_DB_PASSWORD}
6+
7+
## Dev OAUTH2
8+
spring.security.oauth2.client.registration.naver.redirect-uri=${CLOUD_NAVER_OAUTH_REDIRECT_URI}
9+
spring.security.oauth2.client.registration.google.redirect-uri=${CLOUD_GOOGLE_OAUTH_REDIRECT_URI}
10+
spring.security.oauth2.client.registration.kakao.redirect-uri=${CLOUD_KAKAO_OAUTH_REDIRECT_URI}
11+
12+
## openai settings
13+
#ai.openai.api-key=${OPENAI_API_KEY}
14+
#ai.openai.chat.options.model=${OPENAI_API_MODEL}
15+
#ai.openai.chat.options.temperature=${OPENAI_API_tmp}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## Local mysql settings
2+
spring.datasource.url=${LOCAL_DB_URL}
3+
spring.datasource.username=${LOCAL_DB_USERNAME}
4+
spring.datasource.password=${LOCAL_DB_PASSWORD}
5+
6+
## LOCAL OAUTH2
7+
spring.security.oauth2.client.registration.naver.redirect-uri=${LOCAL_NAVER_OAUTH_REDIRECT_URI}
8+
spring.security.oauth2.client.registration.google.redirect-uri=${LOCAL_GOOGLE_OAUTH_REDIRECT_URI}
9+
spring.security.oauth2.client.registration.kakao.redirect-uri=${LOCAL_KAKAO_OAUTH_REDIRECT_URI}
10+
11+
## openai settings
12+
#ai.openai.api-key=${OPENAI_API_KEY}
13+
#ai.openai.chat.options.model=${OPENAI_API_MODEL}
14+
#ai.openai.chat.options.temperature=${OPENAI_API_tmp}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Prod mysql settings
2+
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3+
spring.datasource.url=${PROD_DB_URL}
4+
spring.datasource.username=${PROD_DB_USERNAME}
5+
spring.datasource.password=${PROD_DB_PASSWORD}
6+
7+
## Prod OAUTH2
8+
spring.security.oauth2.client.registration.naver.redirect-uri=${CLOUD_NAVER_OAUTH_REDIRECT_URI}
9+
spring.security.oauth2.client.registration.google.redirect-uri=${CLOUD_GOOGLE_OAUTH_REDIRECT_URI}
10+
spring.security.oauth2.client.registration.kakao.redirect-uri=${CLOUD_KAKAO_OAUTH_REDIRECT_URI}
11+
12+
## openai settings
13+
#ai.openai.api-key=${OPENAI_API_KEY}
14+
#ai.openai.chat.options.model=${OPENAI_API_MODEL}
15+
#ai.openai.chat.options.temperature=${OPENAI_API_tmp}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
spring.application.name=SearchWeb
2+
3+
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4+
# mybatis settings
5+
mybatis.mapper-locations=classpath:mapper/*.xml
6+
logging.level.org.mybatis=DEBUG
7+
8+
#logging.level.org.springframework.security=TRACE
9+
logging.level.org.springframework.security=DEBUG
10+
11+
12+
##### Oauth2 session login settings #####
13+
#naver settings
14+
#registration
15+
spring.security.oauth2.client.registration.naver.client-name=naver
16+
spring.security.oauth2.client.registration.naver.client-id=${NAVER_CLIENT_ID}
17+
spring.security.oauth2.client.registration.naver.client-secret=${NAVER_CLIENT_SECRET}
18+
spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code
19+
spring.security.oauth2.client.registration.naver.scope=name,email
20+
#provider
21+
spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize
22+
spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token
23+
spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me
24+
spring.security.oauth2.client.provider.naver.user-name-attribute=response
25+
26+
27+
#google settings
28+
#registration
29+
spring.security.oauth2.client.registration.google.client-name=google
30+
spring.security.oauth2.client.registration.google.client-id=${GOOGLE_CLIENT_ID}
31+
spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_CLIENT_SECRET}
32+
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
33+
spring.security.oauth2.client.registration.google.scope=profile,email
34+
35+
36+
#kakao settings
37+
#registration
38+
spring.security.oauth2.client.registration.kakao.client-name=kakao
39+
spring.security.oauth2.client.registration.kakao.client-id=${KAKAO_CLIENT_ID}
40+
spring.security.oauth2.client.registration.kakao.client-secret=${KAKAO_CLIENT_SECRET}
41+
spring.security.oauth2.client.registration.kakao.client-authentication-method=client_secret_post
42+
spring.security.oauth2.client.registration.kakao.authorization-grant-type=authorization_code
43+
spring.security.oauth2.client.registration.kakao.scope=profile_nickname, account_email
44+
#provider
45+
spring.security.oauth2.client.provider.kakao.authorization-uri=https://kauth.kakao.com/oauth/authorize
46+
spring.security.oauth2.client.provider.kakao.token-uri=https://kauth.kakao.com/oauth/token
47+
spring.security.oauth2.client.provider.kakao.user-info-uri=https://kapi.kakao.com/v2/user/me
48+
spring.security.oauth2.client.provider.kakao.user-name-attribute=id
49+
50+
#spring.config.import=optional:dotenv:.env

version.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1.1.0

0 commit comments

Comments
 (0)