본문 바로가기
AWS, Infra/Jenkins

[Jenkins] Github 설정 파일, 접속 정보를 배포 시에 변경하자 (sed 명령어)

by RoJae 2022. 6. 26.

🚀  들어가며...

  • 개인 프로젝트나, 사내 중요한 정보가 인터넷에 공개 되면 안되는 경우에 해당합니다.
  • Github에 데이터베이스 접속 정보를 "특정 문자열"로 설정하여, Jenkins에서 변경해줍니다.

 

🚦 Github의 yml, properties 파일 관리

######################################
## Spring bean override option
#######################################
spring:
  redis:
    host: ${REDIS_IP}
    port: ${REDIS_PORT}
    connect-timeout: 1000000
  main:
    allow-bean-definition-overriding: true

.... 

######################################
## Database connection Infomation
#######################################
datasource:
tomcat:
  test-on-borrow: true
  validation-query: SELECT 1

mariadb:
  driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  jdbc-url: jdbc:log4jdbc:mariadb://${DB_IP}:${DB_PORT}/${DB_NAME}?${DB_OPT}
  username: ${DB_USERNAME}
  password: ${DB_PASSWORD}

${} 표시로 선언된 변수들을, Jenkins에서 변경하면

인터넷에 접속 정보를 노출하지 않고

배포의 자동화를 이룰 수 있습니다.

 

✈️  문자열 변수 선언

우선 Jenkins에서 변수를 할당해줍니다.

(이때 변수명에 하이픈 '-'이 아닌 '_' 언더스코어를 씁니다. -> 쉘 동작시 오류 가능성 있음)

Jenkins의 String 파라미터

위 예시를 토대로, 총 8개로 아래와 같습니다.

# 포스팅을 위한 샘플 변수
REDIS_IP = 172.32.31.10
REDIS_PORT = 6379

DB_USERNAME = username
DB_PASSWORD = password

DB_IP = 172.90.31.10
DB_PORT = 3306
DB_NAME = testdb

# 옵션의 경우는 특이하게 해야합니다.
# 특수문자 "&, /"로 인해서 '\'을 꼭 넣어줍시다.
DB_OPT = characterEncoding=UTF-8\&serverTimezone=Asia\/Seoul\&useSSL=FALSE\&sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'\&jdbcCompliantTruncation=false

 

💌 sed 스크립트 추가

Maven Package 이전에 Bash Shell의 sed 명령어를 사용합니다. (Gradle build 이전)

echo '01. REDIS :: IP, Port Setting\'
sed -i "s/\${REDIS_IP}/${REDIS_IP}/" "${WORKSPACE}/src/main/resources/application.yml"
sed -i "s/\${REDIS_PORT}/${REDIS_PORT}/" "${WORKSPACE}/src/main/resources/application.yml"

echo '02. Database :: UserName, Password Setting\'
sed -i "s/\${DB_USERNAME}/${DB_USERNAME}/" "${WORKSPACE}/src/main/resources/application.yml"
sed -i "s/\${DB_PASSWORD}/${DB_PASSWORD}/" "${WORKSPACE}/src/main/resources/application.yml"

echo '03. Database :: IP, Port, Name, Opt Setting\'
sed -i "s/\${DB_IP}/${DB_IP}/" "${WORKSPACE}/src/main/resources/application.yml"
sed -i "s/\${DB_PORT}/${DB_PORT}/" "${WORKSPACE}/src/main/resources/application.yml"
sed -i "s/\${DB_NAME}/${DB_NAME}/" "${WORKSPACE}/src/main/resources/application.yml"
sed -i "s/\${DB_OPT}/${DB_OPT}/" "${WORKSPACE}/src/main/resources/application.yml"

 

위 절차를 통해서 application.yml의 정보가 바뀝니다.

 

⚙️ 빌드와 배포 진행

이후 빌드를 진행하여, WAS (혹은 기타 서버)에 배포를 진행하면 됩니다.

Maven clean -> Maven package -> Maven Deploy (서버 배포)

 

 

📑 배포 확인

배포된 서버의 application.yml을 보면 문자열이 적절하게 변경된 것을 확인 할 수 있습니다.

######################################
## Spring bean override option
#######################################
spring:
  redis:
    host: 172.32.31.10
    port: 6379
    connect-timeout: 1000000
  main:
    allow-bean-definition-overriding: true

.... 

######################################
## Database connection Infomation
#######################################
datasource:
tomcat:
  test-on-borrow: true
  validation-query: SELECT 1

mariadb:
  driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  jdbc-url: jdbc:log4jdbc:mariadb://172.90.31.10:3306/testdb?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&useSSL=FALSE&sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
  username: username
  password: password

 

 

🙋🏻‍♂️ 후기

sed 명령어를 통해서, 문자열 내용들 배포 서버에서 변경이 가능하다.

 

 

 

 

'AWS, Infra > Jenkins' 카테고리의 다른 글

[Jenkins] war 파일 빌드 배포 설정  (0) 2022.04.08

댓글