|
9 | 9 | build-and-docker:
|
10 | 10 | runs-on: ubuntu-latest
|
11 | 11 | steps:
|
12 |
| - # 1. 코드 체크아웃 |
| 12 | + # 코드 체크아웃 |
13 | 13 | - name: Checkout code
|
14 | 14 | uses: actions/checkout@v3
|
15 |
| - |
16 |
| - - name: List files in Runner |
17 |
| - run: | |
18 |
| - echo "Current directory:" |
19 |
| - pwd |
20 |
| - echo "Contents of the directory:" |
21 |
| - ls -la |
22 |
| - |
23 |
| - # 2. JDK 설치 |
| 15 | + # JDK 설치 |
24 | 16 | - name: Set up JDK 21 # 실행 환경에서 사용 중인 JDK 확인 (java -version)
|
25 | 17 | uses: actions/setup-java@v2
|
26 | 18 | with:
|
27 | 19 | java-version: '21'
|
28 | 20 | distribution: 'temurin'
|
29 |
| - # 3. Gradle Wrapper 검증 |
| 21 | + # Gradle Wrapper 검증 |
30 | 22 | - name: Set up Gradle
|
31 | 23 | uses: gradle/wrapper-validation-action@v1
|
32 |
| - # 4. Gradle 빌드 |
| 24 | + # 설정 파일 생성 |
| 25 | + - name: Create Config Files |
| 26 | + run: | |
| 27 | + mkdir -p ontime-back/src/main/resources |
| 28 | + mkdir -p ontime-back/src/main/resources/key |
| 29 | + echo "spring.application.name=${{ secrets.SPRING_APPLICATION_NAME }}" > ontime-back/src/main/resources/application.properties |
| 30 | + echo "spring.datasource.url=${{ secrets.SPRING_DATASOURCE_URL }}" >> ontime-back/src/main/resources/application.properties |
| 31 | + echo "spring.datasource.username=${{ secrets.SPRING_DATASOURCE_USERNAME }}" >> ontime-back/src/main/resources/application.properties |
| 32 | + echo "spring.datasource.password=${{ secrets.SPRING_DATASOURCE_PASSWORD }}" >> ontime-back/src/main/resources/application.properties |
| 33 | + echo "spring.datasource.driver-class-name=${{ secrets.SPRING_DATASOURCE_DRIVER_CLASS_NAME }}" >> ontime-back/src/main/resources/application.properties |
| 34 | + echo "spring.jpa.hibernate.ddl-auto=${{ secrets.SPRING_JPA_HIBERNATE_DDL_AUTO }}" >> ontime-back/src/main/resources/application.properties |
| 35 | + echo "jwt.secret.key=${{ secrets.JWT_SECRETKEY }}" >> ontime-back/src/main/resources/application.properties |
| 36 | + echo "jwt.access.expiration=${{ secrets.JWT_ACCESS_EXPIRATION }}" >> ontime-back/src/main/resources/application.properties |
| 37 | + echo "jwt.refresh.expiration=${{ secrets.JWT_REFRESH_EXPIRATION }}" >> ontime-back/src/main/resources/application.properties |
| 38 | + echo "jwt.access.header=${{ secrets.JWT_ACCESS_HEADER }}" >> ontime-back/src/main/resources/application.properties |
| 39 | + echo "jwt.refresh.header=${{ secrets.JWT_REFRESH_HEADER }}" >> ontime-back/src/main/resources/application.properties |
| 40 | + echo "spring.security.oauth2.client.registration.google.client-id=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID }}" >> ontime-back/src/main/resources/application.properties |
| 41 | + echo "spring.security.oauth2.client.registration.google.client-secret=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET }}" >> ontime-back/src/main/resources/application.properties |
| 42 | + echo "spring.security.oauth2.client.registration.google.scope=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_SCOPE }}" >> ontime-back/src/main/resources/application.properties |
| 43 | + echo "spring.security.oauth2.client.registration.google.redirect-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_REDIRECT_URI }}" >> ontime-back/src/main/resources/application.properties |
| 44 | + echo "spring.security.oauth2.client.registration.google.authorization-grant-type=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_AUTHORIZATION_GRANT_TYPE }}" >> ontime-back/src/main/resources/application.properties |
| 45 | + echo "spring.security.oauth2.client.registration.google.client-name=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_NAME }}" >> ontime-back/src/main/resources/application.properties |
| 46 | + echo "spring.security.oauth2.client.provider.google.authorization-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_AUTHORIZATION_URI }}" >> ontime-back/src/main/resources/application.properties |
| 47 | + echo "spring.security.oauth2.client.provider.google.token-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_TOKEN_URI }}" >> ontime-back/src/main/resources/application.properties |
| 48 | + echo "spring.security.oauth2.client.provider.google.user-info-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_USER_INFO_URI }}" >> ontime-back/src/main/resources/application.properties |
| 49 | + echo "spring.security.oauth2.client.provider.google.user-name-attribute=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_GOOGLE_USER_NAME_ATTRIBUTE }}" >> ontime-back/src/main/resources/application.properties |
| 50 | + echo "spring.security.oauth2.client.registration.kakao.client-id=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID }}" >> ontime-back/src/main/resources/application.properties |
| 51 | + echo "spring.security.oauth2.client.registration.kakao.scope=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_SCOPE }}" >> ontime-back/src/main/resources/application.properties |
| 52 | + echo "spring.security.oauth2.client.registration.kakao.redirect-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_REDIRECT_URI }}" >> ontime-back/src/main/resources/application.properties |
| 53 | + echo "spring.security.oauth2.client.registration.kakao.authorization-grant-type=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_AUTHORIZATION_GRANT_TYPE }}" >> ontime-back/src/main/resources/application.properties |
| 54 | + echo "spring.security.oauth2.client.registration.kakao.client-name=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_NAME }}" >> ontime-back/src/main/resources/application.properties |
| 55 | + echo "spring.security.oauth2.client.provider.kakao.authorization-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_AUTHORIZATION_URI }}" >> ontime-back/src/main/resources/application.properties |
| 56 | + echo "spring.security.oauth2.client.provider.kakao.token-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_TOKEN_URI }}" >> ontime-back/src/main/resources/application.properties |
| 57 | + echo "spring.security.oauth2.client.provider.kakao.user-info-uri=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_USER_INFO_URI }}" >> ontime-back/src/main/resources/application.properties |
| 58 | + echo "spring.security.oauth2.client.provider.kakao.user-name-attribute=${{ secrets.SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KAKAO_USER_NAME_ATTRIBUTE }}" >> ontime-back/src/main/resources/application.properties |
| 59 | + echo "apple.client.id=${{ secrets.APPLE_CLIENT_ID }}" >> ontime-back/src/main/resources/application.properties |
| 60 | + echo "apple.client.secret=${{ secrets.APPLE_CLIENT_SECRET }}" >> ontime-back/src/main/resources/application.properties |
| 61 | + echo "apple.login.key=${{ secrets.APPLE_LOGIN_KEY }}" >> ontime-back/src/main/resources/application.properties |
| 62 | + echo "apple.team.id=${{ secrets.APPLE_TEAM_ID }}" >> ontime-back/src/main/resources/application.properties |
| 63 | + echo "management.endpoints.web.exposure.include=health" >> ontime-back/src/main/resources/application.properties |
| 64 | + echo "management.endpoint.health.show-details=always" >> ontime-back/src/main/resources/application.properties |
| 65 | + echo "${{ secrets.ONTIME_PUSH_FIREBASE_ADMINSDK }}" > ontime-back/src/main/resources/ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json |
| 66 | + |
| 67 | + echo "${{ secrets.AUTHKEY_743M7R5W3W }}" > ontime-back/src/main/resources/key/AuthKey_743M7R5W3W.p8 |
| 68 | + # Gradle 빌드 |
33 | 69 | - name: Build with Gradle
|
34 | 70 | run: |
|
35 | 71 | cd ontime-back
|
36 | 72 | ./gradlew build -x test
|
37 |
| - deploy-to-ec2: |
| 73 | + # 파일 위치 변경 |
| 74 | + - name: Move file |
| 75 | + run: | |
| 76 | + mv ontime-back/src/main/resources/ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json ./ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json |
| 77 | + mv ontime-back/src/main/resources/application.properties ./application.properties |
| 78 | + mv ontime-back/src/main/resources/key/AuthKey_743M7R5W3W.p8 ./AuthKey_743M7R5W3W.p8 |
| 79 | + mv ontime-back/build/libs/ontime-back-0.0.1-SNAPSHOT.jar ./project.jar |
| 80 | + mv ontime-back/docker-compose.yml ./docker-compose.yml |
| 81 | + mv ontime-back/Dockerfile ./Dockerfile |
| 82 | + # EC2 서버에 업로드 |
| 83 | + - name: Upload files to EC2 |
| 84 | + uses: appleboy/scp-action@v0.1.7 |
| 85 | + with: |
| 86 | + host: ${{ secrets.EC2_HOST }} |
| 87 | + username: ${{ secrets.EC2_USER }} |
| 88 | + key: ${{ secrets.EC2_SSH_KEY }} |
| 89 | + source: "./project.jar, ./docker-compose.yml, ./Dockerfile, ./ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json, ./application.properties, ./AuthKey_743M7R5W3W.p8" |
| 90 | + target: "/home/ubuntu/OnTime-back" |
| 91 | + debug: true |
| 92 | + create-config-files: |
38 | 93 | needs: build-and-docker
|
39 | 94 | runs-on: ubuntu-latest
|
40 |
| - |
41 |
| - |
42 | 95 | steps:
|
43 |
| - - name: Delete existing folder |
| 96 | + # EC2 서버에 접근 + 설정 파일 생성 |
| 97 | + - name: SSH to EC2 & Create Config Files |
44 | 98 | uses: appleboy/ssh-action@master
|
45 | 99 | with:
|
46 | 100 | host: ${{ secrets.EC2_HOST }}
|
47 | 101 | username: ${{ secrets.EC2_USER }}
|
48 | 102 | key: ${{ secrets.EC2_SSH_KEY }}
|
49 | 103 | debug: true
|
50 | 104 | script: |
|
51 |
| - sudo rm -rf /home/ubuntu/OnTime-back |
52 |
| - |
53 |
| - - name: Checkout code |
54 |
| - uses: actions/checkout@v3 |
55 |
| - |
56 |
| - - name: Upload files to EC2 |
57 |
| - uses: appleboy/scp-action@v0.1.7 |
58 |
| - with: |
59 |
| - host: ${{ secrets.EC2_HOST }} |
60 |
| - username: ${{ secrets.EC2_USER }} |
61 |
| - key: ${{ secrets.EC2_SSH_KEY }} |
62 |
| - source: "./" |
63 |
| - target: "/home/ubuntu/OnTime-back" |
64 |
| - debug: true |
65 |
| - |
66 |
| - |
67 |
| - - name: Deploy to EC2 |
68 |
| - uses: appleboy/ssh-action@master |
69 |
| - with: |
70 |
| - host: ${{ secrets.EC2_HOST }} |
71 |
| - username: ${{ secrets.EC2_USER }} |
72 |
| - key: ${{ secrets.EC2_SSH_KEY }} |
73 |
| - debug: true |
74 |
| - script: | |
75 |
| - sudo mkdir -p /home/ubuntu/OnTime-back/ontime-back/src/main/resources |
76 |
| - echo "${{ secrets.ONTIME_PUSH_FIREBASE_ADMINSDK }}" > /home/ubuntu/OnTime-back/ontime-back/src/main/resources/ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json |
77 |
| -
|
78 | 105 | sudo mkdir -p /home/ubuntu/OnTime-back/ontime-back/src/main/resources/key
|
79 |
| - cd /home/ubuntu/OnTime-back/ontime-back/src/main/resources/key |
80 |
| - cat <<EOT > /home/ubuntu/OnTime-back/ontime-back/src/main/resources/key/AuthKey_743M7R5W3W.p8 |
81 |
| - ${{ secrets.AUTHKEY_743M7R5W3W }} |
82 |
| - EOT |
83 |
| - |
84 |
| - cd /home/ubuntu/OnTime-back/ontime-back |
85 |
| - CONTAINER_ID=$(sudo docker ps -aq --filter "name=ontime-container") |
86 |
| - if [ ! -z "$CONTAINER_ID" ]; then |
87 |
| - sudo docker stop $CONTAINER_ID |
88 |
| - sudo docker rm $CONTAINER_ID |
89 |
| - fi |
90 |
| - # 기존 컨테이너 중지 및 제거 |
91 |
| - sudo docker-compose down |
92 |
| - # 용량 정리 |
93 |
| - sudo docker container prune |
94 |
| - sudo docker image prune -a |
95 |
| - sudo docker volume prune |
96 |
| - sudo docker network prune |
97 |
| - # 소스 코드 빌드 및 컨테이너 실행 |
98 | 106 | # .env 파일 생성
|
99 |
| - cat <<EOT > .env |
| 107 | + sudo bash -c 'cat <<EOT > /home/ubuntu/OnTime-back/.env |
100 | 108 | MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }}
|
101 | 109 | MYSQL_USER=${{ secrets.MYSQL_USER }}
|
102 | 110 | MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }}
|
@@ -137,7 +145,39 @@ jobs:
|
137 | 145 | APPLE_CLIENT_SECRET=${{ secrets.APPLE_CLIENT_SECRET }}
|
138 | 146 | APPLE_LOGIN_KEY=${{ secrets.APPLE_LOGIN_KEY }}
|
139 | 147 | APPLE_TEAM_ID=${{ secrets.APPLE_TEAM_ID }}
|
140 |
| - EOT |
| 148 | + EOT' |
| 149 | +
|
| 150 | + sudo mv /home/ubuntu/OnTime-back/ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json /home/ubuntu/OnTime-back/ontime-back/src/main/resources/ontime-push-firebase-adminsdk-gnpxs-7d098872ff.json |
| 151 | + sudo mv /home/ubuntu/OnTime-back/application.properties /home/ubuntu/OnTime-back/ontime-back/src/main/resources/application.properties |
| 152 | + sudo mv /home/ubuntu/OnTime-back/AuthKey_743M7R5W3W.p8 /home/ubuntu/OnTime-back/ontime-back/src/main/resources/key/AuthKey_743M7R5W3W.p8 |
| 153 | +
|
| 154 | + deploy-to-ec2: |
| 155 | + needs: create-config-files |
| 156 | + runs-on: ubuntu-latest |
| 157 | + steps: |
| 158 | + # EC2 서버에 접근 + docker container 배포 |
| 159 | + - name: SSH to EC2 & Deploy Docker Containers |
| 160 | + uses: appleboy/ssh-action@master |
| 161 | + with: |
| 162 | + host: ${{ secrets.EC2_HOST }} |
| 163 | + username: ${{ secrets.EC2_USER }} |
| 164 | + key: ${{ secrets.EC2_SSH_KEY }} |
| 165 | + script: | |
| 166 | + # 기존 컨테이너 종료 및 삭제 |
| 167 | + CONTAINER_ID=$(sudo docker ps -aq --filter "name=ontime-container") |
| 168 | + if [ ! -z "$CONTAINER_ID" ]; then |
| 169 | + sudo docker stop $CONTAINER_ID |
| 170 | + sudo docker rm $CONTAINER_ID |
| 171 | + fi |
| 172 | + |
| 173 | + # 기존 컨테이너 및 볼륨 정리 |
| 174 | + sudo docker-compose down |
| 175 | + sudo docker container prune -f |
| 176 | + sudo docker image prune -a -f |
| 177 | + sudo docker volume prune -f |
| 178 | + sudo docker network prune -f |
141 | 179 |
|
142 | 180 | # Docker Compose 실행
|
| 181 | + cd /home/ubuntu/OnTime-back |
143 | 182 | docker-compose up --build -d
|
| 183 | + |
0 commit comments