-
Notifications
You must be signed in to change notification settings - Fork 0
171 lines (149 loc) · 5.64 KB
/
Copy pathdev-deploy.yml
File metadata and controls
171 lines (149 loc) · 5.64 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# github repository Actions 페이지에 나타낼 이름
name: dev deploy
# event trigger
on:
push:
branches:
- develop
jobs:
develop-cd:
runs-on: ubuntu-22.04 # 필수, 실행환경 지정
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v3
# (2) JDK 17 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
## (3-1) application-dev.yml 생성
- name: make application-dev.yml
run: |
cd ./snackpot-api/src/main/resources
touch ./application-dev.yml
echo "${{ secrets.APPLICATION_DEV_YML }}" > ./application-dev.yml
shell: bash
## (3-2) application-jwt.yml 생성
- name: make application-jwt.yml
run: |
cd ./snackpot-api/src/main/resources
touch ./application-jwt.yml
echo "${{ secrets.APPLICATION_JWT_YML }}" > ./application-jwt.yml
shell: bash
## (3-3) .env 생성
- name: make .env
run: |
cd ./snackpot-api
touch ./.env
echo "${{ secrets.DEV_DOCKER_ENV }}" > .env
ls -al
shell: bash
## (3-4) application-fcm.yml 생성
- name: make application-fcm.yml
run: |
cd ./snackpot-api/src/main/resources
touch ./application-fcm.yml
echo "${{ secrets.APPLICATION_FCM_YML }}" > ./application-fcm.yml
shell: bash
## (3-5) application-prometheus.yml 생성
- name: make application-prometheus.yml
run: |
echo "${{ secrets.APPLICATION_PROMETHEUS_YML }}" | base64 --decode > ./snackpot-api/src/main/resources/application-prometheus.yml
shell: bash
## (3-6) prometheus.yml 생성
- name: make prometheus.yml
run: |
cd ./snackpot-api/src/main/resources
touch ./prometheus.yml
echo "${{ secrets.PROMETHEUS_YML }}" > ./prometheus.yml
shell: bash
## (3-7) application-logging.yml 생성
- name: make application-logging.yml
run: |
cd ./snackpot-api/src/main/resources
touch ./application-logging.yml
echo "${{ secrets.APPLICATION_LOGGING_YML }}" > ./application-logging.yml
shell: bash
## (3-8) snackpot-fcm.json 생성
- name: make snackpot-fcm.json
run: echo "${{ secrets.FCM_JSON_SECRET }}" | base64 --decode > ./snackpot-api/src/main/resources/snackpot-fcm.json
shell: bash
# (4) ./gradlew 권한 설정
- name: ./gradlew 권한 설정
run: chmod +x ./gradlew
# (5) Gradle build snackpot-api모듈만 build (Test 제외)
- name: Build with Gradle
run: ./gradlew :snackpot-api:clean build -x test
# (6) docker build & push to production
- name: Docker build & push to DockerHub
run: |
docker login -u ${{ secrets.DOCKER_MJ_USERNAME }} -p ${{ secrets.DOCKER_MJ_PASSWORD }}
docker build -t ${{ secrets.DOCKER_MJ_REPO }}:latest-dev ./snackpot-api
docker push ${{ secrets.DOCKER_MJ_REPO }}:latest-dev
# (7) aws 세팅
- name: aws 세팅
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_DEV_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_DEV_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
# (8) 로컬 docker-compose.yml 파일 EC2로 복사
- name: Copy docker-compose.yml to EC2 via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_EC2_USERNAME }}
key: ${{ secrets.DEV_KEY }}
port: 22
source : "./snackpot-api/docker-compose-dev.yml"
target : "./snackApp"
debug: true
# (8) 로컬 docker-compose.yml 파일 EC2로 복사
- name: Copy dev-application.yml to EC2 via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_EC2_USERNAME }}
key: ${{ secrets.DEV_KEY }}
port: 22
source : "./snackpot-api/src/main/resources/*"
target : "./snackApp"
debug: true
# (8) 로컬 .env파일 파일 EC2로 복사
- name: Copy .env to EC2 via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_EC2_USERNAME }}
key: ${{ secrets.DEV_KEY }}
port: 22
source : "./snackpot-api/.env"
target : "./snackApp"
debug: true
# (8) 로컬 mariadb 파일 파일 EC2로 복사
- name: Copy mariadb to EC2 via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_EC2_USERNAME }}
key: ${{ secrets.DEV_KEY }}
port: 22
source : "./snackpot-api/mariadb"
target : "./snackApp"
debug: true
# (9) 서버에 접속하여 도커 이미지를 pull 받고 실행하기
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_EC2_USERNAME }}
key: ${{ secrets.DEV_KEY }}
port: 22
script: |
cd snackApp/snackpot-api
sudo docker-compose -f docker-compose-dev.yml down
sudo docker-compose -f docker-compose-dev.yml pull
sudo docker image rm ${{ secrets.DOCKER_MJ_REPO }}
sudo docker-compose -f docker-compose-dev.yml up -d