ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Jenkins] Github 설정 파일, 접속 정보를 배포 시에 변경하자 (sed 명령어)
    AWS, Infra/Jenkins 2022. 6. 26. 21:49

    🚀  들어가며...

    • 개인 프로젝트나, 사내 중요한 정보가 인터넷에 공개 되면 안되는 경우에 해당합니다.
    • 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
Designed by Tistory.