gradle의 profile(개발용/배포용)을 분리하여 보자


기존에 운영하던 아무코딩에서 작성한 post입니다.

이전에 프로젝트의 원활한 배포를 위해 자동배포를 설정했었다.

하지만 문제가 있었다. 배포를 위한 서버용 db와 개발시 사용하는 db의 url 이나 나뉘어지는 설정이 많은데 그때마다

application.yml에서 설정을 변경한뒤 실행 할 수는 없었다.

그래서 간단하게 내가 분리한 방법을 설명하고자 한다.


먼저 resource 분리

img

공통되는 부분은 resources폴더에 두고 application.yml 파일은 분리한다.

resources-dev/application.yml

spring:
  profiles:
    active: dev # 기본 환경 선택

--- # dev 환경

spring:
  profiles: dev

  datasource:
    url: jdbc:mysql://localhost:3306/amitie_db?serverTimezone=UTC&characterEncoding=utf8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: dongwook
    password: dongwook

  mybatis:
    type-aliases-package: com.project.amitie.mapper
    mapper-locations: mybatis/mapper/**/*.xml


# SQL Log 볼 때 사용하는 옵션
logging:
  level:
    jdbc.sqlonly: info
    org.springframework.web: DEBUG
    com.zaxxer.hikari.HikariDataSource: warn

##

resource-release/application.yml

spring:
  profiles:
    active: release # 기본 환경 선택

--- # 운영 환경
spring:
  profiles: release

  datasource:
    url: jdbc:mysql://{서버ip주소}:3306/amitie_db?serverTimezone=UTC&characterEncoding=utf8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: dongwook
    password: dongwook

    mybatis:
      type-aliases-package: com.project.amitie.mapper
      mapper-locations: mybatis/mapper/**/*.xml

##

gradle 설정

build.gradle 파일에 다음과 같이 내용을 추가한다.

ext.profile = (!project.hasProperty('profile') || !profile) ? 'dev' : profile

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/resources-${profile}"
        }
    }
}

기본적으로 default로 dev를 사용하도록 하고 입력으로 들어온 값으로 리소스폴더를 매핑시켜줍니다.

젠킨스 설정

img

젠킨스에서 빌드시 위와같이 profile명을 주입하여 실행하면 resource-release에 있는 yml이 실행된다.

on Gradle