-
Notifications
You must be signed in to change notification settings - Fork 3
137 lines (121 loc) · 4.53 KB
/
CD.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
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
name: Java CD with Gradle
on:
issue_comment:
types: [ created, edited ]
jobs:
build:
if: github.event.issue.pull_request && contains(github.event.comment.body, '/아워메뉴') && contains(github.event.comment.body, '배포')
runs-on: ubuntu-latest
permissions:
write-all
services:
mysql:
image: mysql:8.0
ports:
- 3306:3306
env:
MYSQL_DATABASE: testdb
MYSQL_ROOT_PASSWORD: testdb
options: >-
--health-cmd="mysqladmin ping --silent"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# Setup Redis
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1.30.1
with:
redis-version: 6.2.0
redis-port: 6379
auto-start: true
redis-password: 12345678
# Redis Health Check
- name: Redis Health Check
run: redis-cli -h 127.0.0.1 -p 6379 -a 12345678 ping
# Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
- name: Build with Gradle Wrapper
env:
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3306/testdb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: testdb
SPRING_DATA_MONGODB_URL: ${{ secrets.MONGODB_URL }}
#auth
JWT_SECRET_KEY: asdfasdfkjalsdfjkalsdjfkljaskdlfjjaklsdjfklajdskfjaklsdjfklasdjkflajsdklfajklsdfjkalsdjfklajsdklfajkl
SPRINT_REDIS_HOST: localhost
REDIS_PASSWORD: 12345678
GMAIL_ADDRESS: qwer@naver.com
GMAIL_PASSWORD: 12423423
#S3
BUCKET_NAME: ${{ secrets.BUCKET_NAME }}
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
#ddl
SPRING_JPA_HIBERNATE_DDL_AUTO: update
run: ./gradlew build --stacktrace
# dockerfile을 통해 이미지를 빌드하고, 이를 docker repo로 push
- name: docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Push Docker images
run: |
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }} .
docker push ${{ secrets.DOCKER_REPO }}
deploy:
needs: build
runs-on: ubuntu-latest
permissions:
write-all
steps:
# appleboy/ssh-action@master 액션을 사용하여 지정한 서버에 ssh로 접속하고, script를 실행합니다.
# script의 내용은 도커의 기존 프로세스들을 제거하고, docker repo로부터 방금 위에서 push한 내용을 pull 받아 실행하는 것입니다.
# 실행 시, docker-compose를 사용합니다.
- name: Deploy to server
uses: appleboy/ssh-action@master
env:
COMPOSE: ${{ secrets.DOCKER_COMPOSE }}
id: deploy
with:
host: ${{ secrets.HOST }}
username: ubuntu
port: 22
key: ${{ secrets.KEY }}
envs: GITHUB_SHA
script: |
sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
cd ${{secrets.PROJECT_PATH}}
sudo docker-compose down
sudo docker rm $(sudo docker ps -a -q)
sudo docker rmi $(sudo docker images -q)
sudo git pull origin main
sudo docker pull ${{secrets.DOCKER_REPO }}
sudo docker-compose up --build -d
- name: Notify
uses: actions/github-script@v5
with:
github-token: ${{secrets.TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '🌎 배포하였습니다.'
})
- name: add label
uses: actions-ecosystem/action-add-labels@v1
with:
labels: ":satellite: 자동 배포"