Skip to content

Commit

Permalink
chore: cd git actions 작성 (#199)
Browse files Browse the repository at this point in the history
* chore: deploy cd 작성

* chore: deploy-dev 수정

* fix: remove set yaml file

* fix: remove set yaml file

* fix: actions -> action

* fix: set up jdk 11

* fix: add distribution

* feat: health check 추가

* fix: add run

* fix: fix source

* fix workflows

* Update deploy-dev.yml

* Update deploy-dev.yml

* gradle cache

* Update sonarqube.yml

* Update sonarqube.yml

* Update deploy-dev.yml

* git action test

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* fix: update docker script

* feat: prod logback 추가

* Update logback-spring.xml

* add git ignore

* Update deploy-dev.yml

* fix: redis 주석처리

* fix: docker-compose -> docker run

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml

* fix: application.yml

* fix: build action

* Update deploy-dev.yml

* Update deploy-dev.yml

* Update deploy-dev.yml
  • Loading branch information
stophwan authored Dec 5, 2023
1 parent a0ec713 commit bf4b455
Show file tree
Hide file tree
Showing 20 changed files with 230 additions and 51 deletions.
59 changes: 59 additions & 0 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Dev deploy

on:
push:
branches:
- develop

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'

- 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-
- name: Grant execute permission for gradlew
run: chmod +x gradlew

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

- name: Build Docker image
run: |
docker login -u ${{ secrets.DOCKERHUB_ID }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/mju-graduate-server:v2 \
--build-arg DATASOURCE_URL=${{ secrets.DATASOURCE_URL }} \
--build-arg DATASOURCE_USERNAME=${{ secrets.DATASOURCE_USERNAME }} \
--build-arg DATASOURCE_PASSWORD=${{ secrets.DATASOURCE_PASSWORD }} \
--build-arg JWT_SECRET=${{ secrets.JWT_SECRET }} .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/mju-graduate-server:v2
- name: Docker Deploy executing remote ssh commands using ssh_key
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.WAS_HOST }}
username: ${{ secrets.WAS_USERNAME }}
key: ${{ secrets.WAS_KEY }}
script : |
cd ~/mju-graduate-server
docker stop $(docker ps -a -q)
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/mju-graduate-server:v2
docker rm -f $(docker ps -a -q)
docker run -d --name mju-graduate-api-server -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/mju-graduate-server:v2
16 changes: 8 additions & 8 deletions .github/workflows/pr-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ jobs:
java-version: '11'
distribution: 'temurin'

- name: Set yaml file
uses: microsoft/variable-substitution@v1
- name: Gradle Caching
uses: actions/cache@v3
with:
files: ./src/main/resources/application.yml
env:
spring.datasource.url: ${{secrets.DB_URL}}
spring.datasource.username: ${{secrets.DB_USERNAME}}
spring.datasource.password: ${{secrets.DB_PASSWORD}}
server.port: ${{secrets.PORT}}
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Gradle wrapper 파일 실행 권한주기
- name: Grant execute permission for gradlew
Expand Down
30 changes: 12 additions & 18 deletions .github/workflows/sonarqube.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,32 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up JDK 11
uses: actions/setup-java@v1
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 11

- name: Set yaml file
uses: microsoft/variable-substitution@v1
with:
files: ./src/main/resources/application.yml
env:
spring.datasource.url: ${{secrets.DB_URL}}
spring.datasource.username: ${{secrets.DB_USERNAME}}
spring.datasource.password: ${{secrets.DB_PASSWORD}}
server.port: ${{secrets.PORT}}

- name: Cache SonarCloud packages
uses: actions/cache@v1
uses: actions/cache@v3
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar

- name: Cache Gradle packages
uses: actions/cache@v1
- name: Gradle Caching
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Gradle wrapper 파일 실행 권한주기
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ out/

/node_modules
*.DS_Store

deploy/
src/main/java/com/plzgraduate/myongjigraduatebe/core/EnvironmentCheck.java
14 changes: 14 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM openjdk:11

ARG JAR_FILE=build/libs/*.jar
ARG PROFILE=prod
ARG DATASOURCE_URL
ARG DATASOURCE_USERNAME
ARG DATASOURCE_PASSWORD
ARG JWT_SECRET

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app.jar"]
Empty file modified gradlew
100644 → 100755
Empty file.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,30 @@

import lombok.RequiredArgsConstructor;


@PersistenceAdapter
@RequiredArgsConstructor
public class RefreshTokenAdaptor implements FindRefreshTokenPort, SaveRefreshTokenPort {
private final RefreshTokenRepository refreshTokenRepository;
private final RefreshTokenMapper refreshTokenMapper;

//private final RefreshTokenRepository refreshTokenRepository;
//private final RefreshTokenMapper refreshTokenMapper;

@Override
public Optional<RefreshToken> findByRefreshToken(String refreshToken) {
/**
Optional<RefreshTokenRedisEntity> refreshTokenRedisEntity = refreshTokenRepository.findByRefreshToken(refreshToken);
if(refreshTokenRedisEntity.isEmpty()) {
return Optional.empty();
}
return Optional.of(refreshTokenMapper.mapToDomainEntity(refreshTokenRedisEntity.get()));
**/
return Optional.empty();
}

@Override
public void saveRefreshToken(RefreshToken refreshToken) {
/**
refreshTokenRepository.save(refreshTokenMapper.mapToJpaEntity(refreshToken));
**/
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.plzgraduate.myongjigraduatebe.auth.adaptor.out.persistence;

import java.util.ArrayList;

import javax.persistence.Id;

import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@

import lombok.RequiredArgsConstructor;

/**
@Repository
@RequiredArgsConstructor
public class RefreshTokenRepository {
private final RedisTemplate<String, Long> redisTemplate;
public void save(RefreshTokenRedisEntity refreshToken) {
ValueOperations<String, Long> valueOperations = redisTemplate.opsForValue();
valueOperations.set(refreshToken.getRefreshToken(), refreshToken.getUserId());
redisTemplate.expire(refreshToken.getRefreshToken(), 60L, TimeUnit.SECONDS);
Expand All @@ -32,3 +34,4 @@ public Optional<RefreshTokenRedisEntity> findByRefreshToken(final String refresh
return Optional.of(RefreshTokenRedisEntity.create(refreshToken, userId));
}
}
**/
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ public class RefreshTokenService {
private final SaveRefreshTokenPort saveRefreshTokenPort;

public void saveRefreshToken(RefreshToken refreshToken) {
/**
saveRefreshTokenPort.saveRefreshToken(refreshToken);
**/
}
public RefreshToken findByRefreshToken(String refreshToken) {
return findRefreshTokenPort.findByRefreshToken(refreshToken)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.plzgraduate.myongjigraduatebe.core;

import javax.annotation.PostConstruct;

import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class EnvironmentCheck {
private final Environment env;

public EnvironmentCheck(Environment env) {
this.env = env;
}

@PostConstruct
public void init() {
String url = env.getProperty("spring.datasource.url");
String username = env.getProperty("spring.datasource.username");
String password = env.getProperty("spring.datasource.password");
String jwtKey = env.getProperty("jwt.secret-key");
log.info("env url={}", url);
log.info("env username={}", username);
log.info("env password={}", password);
log.info("env jwtKey={}", jwtKey);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.plzgraduate.myongjigraduatebe.core;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.plzgraduate.myongjigraduatebe.core.meta.WebAdapter;

@WebAdapter
@RequestMapping("/api/v1")
public class HealthCheckController {

@GetMapping("/health")
public String healthCheck() {
return "healthy";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import lombok.RequiredArgsConstructor;

/**
@Configuration
@RequiredArgsConstructor
public class RedisConfig {
Expand All @@ -30,3 +31,4 @@ public RedisConnectionFactory redisConnectionFactory() {
return redisTemplate;
}
}
**/
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
API_V1_PREFIX + "/auth/token", //새 토큰 발급
API_V1_PREFIX + "/users/{student-number}/auth-id", // 아이디 찾기
API_V1_PREFIX + "/users/{student-number}/validate", // 유저 검증
API_V1_PREFIX + "/users/password" // 비밀번호 재설정
API_V1_PREFIX + "/users/password", // 비밀번호 재설정
API_V1_PREFIX + "/health" //헬스체크
)
.permitAll()
.anyRequest()
Expand Down
53 changes: 40 additions & 13 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,61 @@ spring:

datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
url: jdbc:mysql://localhost:33066/myongji_graduate?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: root
password: mysql

jpa:
hibernate:
ddl-auto: validate
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
open-in-view: false

redis:
host: localhost
port: 6380

flyway:
baseline-on-migrate: true
enabled: true

logging:
level:
p6spy: info

server:
port: ${PORT}
port: 8080

jwt:
issuer: "plzgraduate"
secret-key: "coffee"
expiry-seconds: 86400

---
spring:
config:
activate:
on-profile: dev
jpa:
hibernate:
ddl-auto: none

jwt:
issuer: "plzgraduate"
secret-key: ${JWT_SECRET}
expiry-seconds: 86400

---

spring:
config:
activate:
on-profile: prod

datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DATASOURCE_URL}
username: ${DATASOURCE_USERNAME}
password: ${DATASOURCE_PASSWORD}

jpa:
hibernate:
ddl-auto: none

jwt:
issuer: "plzgraduate"
Expand Down
Loading

0 comments on commit bf4b455

Please sign in to comment.