-
Notifications
You must be signed in to change notification settings - Fork 0
107 lines (100 loc) · 6.2 KB
/
deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
name: Deploy
on:
push:
branches:
- deploy
- dev/deploy1
jobs:
build-and-docker:
runs-on: ubuntu-latest
steps:
# 1. 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v3
# 2. JDK 설치
- name: Set up JDK 21 # 실행 환경에서 사용 중인 JDK 확인 (java -version)
uses: actions/setup-java@v2
with:
java-version: '21'
distribution: 'temurin'
# 3. Gradle Wrapper 검증
- name: Set up Gradle
uses: gradle/wrapper-validation-action@v1
# 4. application.properties 생성
- name: Create application.properties
run: |
mkdir -p src/main/resources
cat <<EOF > src/main/resources/application.properties
spring.application.name=${{ secrets.SPRING_APPLICATION_NAME }}
spring.datasource.url=${{ secrets.SPRING_DATASOURCE_URL }}
spring.datasource.username=${{ secrets.SPRING_DATASOURCE_USERNAME }}
spring.datasource.password=${{ secrets.SPRING_DATASOURCE_PASSWORD }}
spring.datasource.driver-class-name=${{ secrets.SPRING_DATASOURCE_DRIVER_CLASS_NAME }}
spring.jpa.hibernate.ddl-auto=create
jwt.secret-key=${{ secrets.JWT_SECRET_KEY }}
jwt.access.expiration=${{ secrets.JWT_ACCESS_EXPIRATION }}
jwt.refresh.expiration=${{ secrets.JWT_REFRESH_EXPIRATION }}
jwt.access.header=${{ secrets.JWT_ACCESS_HEADER }}
jwt.refresh.header=${{ secrets.JWT_REFRESH_HEADER }}
spring.security.oauth2.client.registration.google.client-id=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID }}
spring.security.oauth2.client.registration.google.client-secret=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET }}
spring.security.oauth2.client.registration.google.scope=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_SCOPE }}
spring.security.oauth2.client.registration.google.redirect-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_REDIRECT_URI }}
spring.security.oauth2.client.registration.google.authorization-grant-type=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_AUTHORIZATION_GRANT_TYPE }}
spring.security.oauth2.client.registration.google.client-name=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_NAME }}
spring.security.oauth2.client.provider.google.authorization-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_AUTHORIZATION_URI }}
spring.security.oauth2.client.provider.google.token-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_TOKEN_URI }}
spring.security.oauth2.client.provider.google.user-info-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_USER_INFO_URI }}
spring.security.oauth2.client.provider.google.user-name-attribute=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_USER_NAME_ATTRIBUTE }}
spring.security.oauth2.client.registration.kakao.client-id=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID }}
spring.security.oauth2.client.registration.kakao.scope=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_SCOPE }}
spring.security.oauth2.client.registration.kakao.redirect-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_REDIRECT_URI }}
spring.security.oauth2.client.registration.kakao.authorization-grant-type=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_AUTHORIZATION_GRANT_TYPE }}
spring.security.oauth2.client.registration.kakao.client-name=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_NAME }}
spring.security.oauth2.client.provider.kakao.authorization-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_AUTHORIZATION_URI }}
spring.security.oauth2.client.provider.kakao.token-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_TOKEN_URI }}
spring.security.oauth2.client.provider.kakao.user-info-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_USER_INFO_URI }}
spring.security.oauth2.client.provider.kakao.user-name-attribute=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_USER_NAME_ATTRIBUTE }}
management.endpoints.web.exposure.include=health
management.endpoint.health.show-details=always
EOF
- name: Check application.properties
run: cat src/main/resources/application.properties
# 5. Gradle 빌드
- name: Build with Gradle
run: |
cd ontime-back
./gradlew build -x test
# 6. Docker Image 빌드
# - name: Build the Docker image
# run: docker build ./ontime-back --file ./ontime-back/Dockerfile --tag ${{ secrets.DOCKER_IMAGE_NAME }}:latest
# - name: Login to Docker Hub using Access Token
# run: echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
# - name: Push the Docker image
# run: docker push ${{ secrets.DOCKER_IMAGE_NAME }}:latest
deploy-to-ec2:
needs: build-and-docker
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
source: ./ # 현재 GitHub Actions의 소스 코드 디렉토리
target: /home/ubuntu/OnTime-back/ # EC2 서버에 업로드될 디렉토리
script: |
cd /home/ubuntu/OnTime-back/ontime-back
CONTAINER_ID=$(sudo docker ps -aq --filter "name=ontime-container")
if [ ! -z "$CONTAINER_ID" ]; then
sudo docker stop $CONTAINER_ID
sudo docker rm $CONTAINER_ID
fi
# 기존 컨테이너 중지 및 제거
sudo docker-compose down || true
# 소스 코드 빌드 및 컨테이너 실행
sudo MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} \
MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }} \
SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }} \
docker-compose up --build -d