Skip to content

Commit 24b65be

Browse files
committed
build: Backend workflow 작성
1 parent 9c2b1a2 commit 24b65be

7 files changed

Lines changed: 123 additions & 4 deletions

File tree

.github/workflows/gradle.yml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# This workflow uses actions that are not certified by GitHub.
2+
# They are provided by a third-party and are governed by
3+
# separate terms of service, privacy policy, and support
4+
# documentation.
5+
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
6+
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
7+
8+
name: Java CI with Gradle
9+
10+
on:
11+
push:
12+
branches: [ BE-deploy ]
13+
pull_request:
14+
branches: [ BE-deploy ]
15+
16+
jobs:
17+
build:
18+
runs-on: ubuntu-latest
19+
defaults:
20+
run:
21+
working-directory: ./BE
22+
23+
steps:
24+
- uses: actions/checkout@v2
25+
26+
# JDK11로 gradle 빌드
27+
- name: Set up JDK 11
28+
uses: actions/setup-java@v2
29+
with:
30+
java-version: '11'
31+
distribution: 'temurin'
32+
33+
- name: Insert data source information into application.yml
34+
run: |
35+
sed -i "s|\${DATASOURCE_URL}|$DATASOURCE_URL|g" ./src/main/resources/application.yml
36+
sed -i "s|\${DATASOURCE_USERNAME}|$DATASOURCE_USERNAME|g" ./src/main/resources/application.yml
37+
sed -i "s|\${DATASOURCE_PASSWORD}|$DATASOURCE_PASSWORD|g" ./src/main/resources/application.yml
38+
39+
sed -i "s|\${OAUTH_CLIENT_SECRET}|$OAUTH_CLIENT_SECRET|g" ./src/main/resources/oauth.yml
40+
sed -i "s|\${OAUTH_ACCESS_SCOPE}|$OAUTH_ACCESS_SCOPE|g" ./src/main/resources/oauth.yml
41+
sed -i "s|\${OAUTH_LOGIN_FORM_URL}|$OAUTH_LOGIN_FORM_URL|g" ./src/main/resources/oauth.yml
42+
sed -i "s|\${JWT_ISSUER}|$JWT_ISSUER|g" ./src/main/resources/oauth.yml
43+
sed -i "s|\${JWT_SECRET_KEY}|$JWT_SECRET_KEY|g" ./src/main/resources/oauth.yml
44+
45+
env:
46+
DATASOURCE_URL: ${{ secrets.DATASOURCE_URL }}
47+
DATASOURCE_USERNAME: ${{ secrets.DATASOURCE_USERNAME }}
48+
DATASOURCE_PASSWORD: ${{ secrets.DATASOURCE_PASSWORD }}
49+
OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }}
50+
OAUTH_ACCESS_SCOPE: ${{ secrets.OAUTH_ACCESS_SCOPE }}
51+
OAUTH_LOGIN_FORM_URL: ${{ secrets.OAUTH_LOGIN_FORM_URL }}
52+
JWT_ISSUER: ${{ secrets.JWT_ISSUER }}
53+
JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}
54+
55+
- name: Grant execute permission for gradlew
56+
run: chmod +x gradlew
57+
- name: Build with Gradle
58+
run: ./gradlew build
59+
60+
# 도커 빌드(도커 이미지 생성)
61+
- name: Docker build
62+
run: |
63+
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
64+
docker build -t ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0 .
65+
docker push ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0
66+
docker rmi ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0
67+
68+
# 도커 이미지 배포 및 실행(EC2 ubuntu20.04로 배포)
69+
- name: Deploy
70+
uses: appleboy/ssh-action@master
71+
with:
72+
host: ${{ secrets.AWS_HOST_DNS }} #(생성한 인스턴스의 DNS주소)
73+
username: ubuntu
74+
key: ${{ secrets.SSH_PRIVATE_KEY }} #(인스턴스를 생성할 때 다운받은 pem키안에 값을 모두 복사해서 붙여넣기)
75+
envs: GITHUB_SHA
76+
script: |
77+
sudo docker ps -a -q --filter "name=issue-tracker" | grep -q . && docker stop issue-tracker && docker rm issue-tracker | true
78+
sudo docker rmi ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0
79+
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0
80+
sudo docker run -d -p 80:8080 --name issue-tracker ${{ secrets.DOCKER_USERNAME }}/issue-tracker:1.0
81+
sudo docker rmi -f $(docker images -f "dangling=true" -q) || true

.gitignore

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

BE/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
oauth.yml
21
HELP.md
32
.gradle
43
build/

BE/Dockerfile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# JDK11 이미지 사용
2+
FROM openjdk:11-jdk
3+
4+
#마운트에 /tmp를 사용하는 이유
5+
#spring boot의 Tomcat의 default 저장소가 /tmp인데
6+
#위와 같이 볼륨 마운트를 해주면 호스트의 /var/lib/docker에 임시파일을 만들고
7+
#컨테이너 안의 /tmp 와 연결할 수 있다는 뜻입니다.
8+
VOLUME /tmp
9+
10+
# JAR_FILE 변수에 값을 저장
11+
ARG JAR_FILE=./build/libs/*.jar
12+
13+
# 변수에 저장된 것을 컨테이너 실행시 이름을 app.jar파일로 변경하여 컨테이너에 저장
14+
COPY ${JAR_FILE} app.jar
15+
16+
# 빌드된 이미지가 run 될 때 실행할 명령어
17+
ENTRYPOINT ["java","-jar","/app.jar"]

BE/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,12 @@ dependencies {
3535
tasks.named('test') {
3636
useJUnitPlatform()
3737
}
38+
39+
jar {
40+
enabled = false
41+
}
42+
bootJar {
43+
archivesBaseName = 'app'
44+
archiveFileName = 'app.jar'
45+
archiveVersion = "0.0.0"
46+
}

BE/src/main/resources/application.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
spring:
22
datasource:
3-
url: ${MYSQL_URL}
4-
username: ${MYSQL_USER}
5-
password: ${MYSQL_PASSWORD}
3+
url: ${DATASOURCE_URL}
4+
username: ${DATASOURCE_USERNAME}
5+
password: ${DATASOURCE_PASSWORD}
66
driver-class-name: com.mysql.cj.jdbc.Driver
77
sql:
88
init:

BE/src/main/resources/oauth.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
oauth:
2+
callback_url: http://louie-03/login/callback
3+
client_id: 2a6bd51e5e7714959341
4+
client_secret: ${OAUTH_CLIENT_SECRET}
5+
access_scope: ${OAUTH_ACCESS_SCOPE}
6+
access_token_api_url: https://github.com/login/oauth/access_token
7+
login_form_url: ${OAUTH_LOGIN_FORM_URL}
8+
user_api_url: https://api.github.com/user
9+
10+
jwt:
11+
issuer: ${JWT_ISSUER}
12+
secret-key: ${JWT_SECRET_KEY}

0 commit comments

Comments
 (0)