Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/dev_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ jobs:
with:
aws_access_key: ${{ secrets.AWS_ACTION_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_ACTION_SECRET_ACCESS_KEY }}
application_name: checkIT-dev
environment_name: CheckIT-dev-env
application_name: check
environment_name: Check-env
version_label: github-action-${{ steps.current-time.outputs.formattedTime }}
region: ap-northeast-2
deployment_package: deploy/deploy.zip
Expand Down
117 changes: 117 additions & 0 deletions .github/workflows/github-actions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# github repository actions 페이지에 나타날 이름
name: CI/CD using github actions & docker

# event trigger
# main이나 develop 브랜치에 push가 되었을 때 실행
on:
push:
branches: [ "dev" ]

permissions:
contents: read

jobs:
CI-CD:
runs-on: ubuntu-latest
steps:

# JDK setting - github actions에서 사용할 JDK 설정 (프로젝트나 AWS의 java 버전과 달라도 무방)
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# gradle caching - 빌드 시간 향상
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

# 환경별 yml 파일 생성(1) - application.yml
- name: make application.yml
if: |
contains(github.ref, 'dev')
run: |
mkdir ./src/main/resources # resources 폴더 생성
cd ./src/main/resources # resources 폴더로 이동
touch ./application.yml # application.yml 생성
echo "${{ secrets.YML }}" > ./application.yml # github actions에서 설정한 값을 application.yml 파일에 쓰기
shell: bash

# 환경별 yml 파일 생성(2) - dev
#- name: make application-dev.yml
# if: contains(github.ref, 'develop')
# run: |
# cd ./src/main/resources
# touch ./application-dev.yml
# echo "${{ secrets.YML_DEV }}" > ./application-dev.yml
#shell: bash

# 환경별 yml 파일 생성(3) - prod
#- name: make application-prod.yml
# if: contains(github.ref, 'main')
#run: |
# cd ./src/main/resources
# touch ./application-prod.yml
# echo "${{ secrets.YML_PROD }}" > ./application-prod.yml
# shell: bash

# gradle build
- name: Build with Gradle
run: ./gradlew build -x test

# docker build & push to production
#- name: Docker build & push to prod
# if: contains(github.ref, 'main')
#run: |
# docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
# docker build -f Dockerfile-dev -t ${{ secrets.DOCKER_USERNAME }}/docker-test-prod .
# docker push ${{ secrets.DOCKER_USERNAME }}/docker-test-prod

# docker build & push to develop
- name: Docker build & push to dev
if: contains(github.ref, 'dev')
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-dev -t ${{ secrets.DOCKER_USERNAME }}/checkit .
docker push ${{ secrets.DOCKER_USERNAME }}/checkit

## deploy to production
#- name: Deploy to prod
#uses: appleboy/ssh-action@master
#id: deploy-prod
# if: contains(github.ref, 'main')
# with:
# host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS
# username: ubuntu
# key: ${{ secrets.PRIVATE_KEY }}
# envs: GITHUB_SHA
# script: |
# sudo docker ps
# sudo docker pull ${{ secrets.DOCKER_USERNAME }}/docker-test-prod
# sudo docker run -d -p 8082:8082 ${{ secrets.DOCKER_USERNAME }}/docker-test-prod
# sudo docker image prune -f

## deploy to develop
- name: Deploy to dev
uses: appleboy/ssh-action@master
id: deploy-dev
if: contains(github.ref, 'dev')
with:
host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS
username: ${{ secrets.USERNAME }} # ubuntu
password: ${{ secrets.PASSWORD }}
port: 22
key: ${{ secrets.PRIVATE_KEY }}
script: |
sudo docker ps
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker run -d -p 8081:8081 ${{ secrets.DOCKER_USERNAME }}/docker-test-dev
sudo docker image prune -f
11 changes: 11 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# open jdk 17 버전의 환경을 구성
FROM openjdk:17-jdk-slim
# build가 되는 시점에 JAR_FILE이라는 변수 명에 build/libs/*.jar 선언
# build/libs - gradle로 빌드했을 때 jar 파일이 생성되는 경로
ARG JAR_FILE=build/libs/*.jar

# JAR_FILE을 app.jar로 복사
COPY ${JAR_FILE} app.jar

# 운영 및 개발에서 사용되는 환경 설정을 분리
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "/app.jar"]
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ dependencies {
// aws 연동 (S3)
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'mysql:mysql-connector-java:8.0.30'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// redis
Expand All @@ -67,6 +68,7 @@ dependencies {
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

}

tasks.named('test') {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/capstone/checkIT/entity/Check.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
@DynamicInsert
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Table(name = "check_table")
public class Check extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
7 changes: 6 additions & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ spring:
password: ${MYSQL_PW}
driver-class-name: com.mysql.cj.jdbc.Driver




servlet:
multipart:
enabled: true
Expand All @@ -21,6 +24,8 @@ spring:
jpa:
properties:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
dialect: org.hibernate.dialect.MySQL8Dialect
show_sql: true
format_sql: true
Expand All @@ -32,4 +37,4 @@ openai:
model: gpt-4o
api:
key: ${OpenAI_API_KEY}
url: https://api.openai.com/v1/chat/completions
url: https://api.openai.com/v1/chat/completions
Loading