-
[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에서 변수를 할당해줍니다.
(이때 변수명에 하이픈 '-'이 아닌 '_' 언더스코어를 씁니다. -> 쉘 동작시 오류 가능성 있음)
위 예시를 토대로, 총 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