티스토리 뷰


keyword : CI/CD, Docker, Jenkins, Deploy
class : Programming


1. 목적

  • application.properties 혹은 application.yml 파일에서 외부로 노출되어서는 안 되는 요소들을 효과적으로 감추면서 CI/CD를 완성하기 위함

2. 개발환경

  • Springboot 2.7.3
  • Java 11
  • Amazon EC2 t2.micro (프리티어)
  • ubuntu 20.04
  • Jenkins 2.376
  • Docker 20.10.21

  • 현재 프로젝트에서 관리하는 application.properties 내용
  • 이대로 깃허브에 푸쉬하면 중요정보가 모두 노출이 된다.

  • Github Actions를 사용하면 Github에서 Secret Actions 설정을 통해 노출이 되어서는 안 되는 설정파일을 빌드할 때만 만들어서 빌드한다.

3. 젠킨스로는 어떻게 관리를 할까?

  • 로컬 환경과 배포 환경 각각 따로 설정파일을 만들어서 @Profile 어노테이션을 통해 관리
  • 외부 폴더에 설정파일을 두고 Dockerfile 내에서 볼륨마운트를 통해 사용
  • 중요정보를 변수로 저장하여 젠킨스 내 빌드에서 string parameter를 통해 변환하여 관리
  • 이 외에도 도커허브의 private repository를 이용하거나, 스크립트를 작성하는 방법 등 여러가지가 있지만,
  • 이번에는 젠킨스 빌드내에서 간편하게 사용이 가능하고 러닝커브가 적은 string parameter를 이용하여 관리해보았다.

4. 구현방법

기본 Flow

  • 깃허브에는 중요정보가 변수로 지정이 된 application.properties를 푸쉬해서 올려둔다.
  • 깃허브에서 설정한 브랜치에 push가 되면 github webhook을 통해 젠킨스가 빌드를 진행한다.
  • ./gradlew clean build를 진행하기 전에 sed 명령어를 통해 변수를 실제 문자열로 치환한다.

설정방법

  • 젠킨스 대시보드 -> 구성에서 다음과 같이 설정한다
  • 매개변수명에는 사용할 변수, Value에는 변환되어야 하는 값을 입력한다.
  • ./gradlew clean build 를 하기 전에 아래와 같이 스크립트를 작성한다.
  • 한 줄에 하나만 작성해도 되고 여러줄을 작성해도 상관없었다.
  • 예시)
    • sed -i "s/${REDIS_HOST}/${REDIS_HOST}/" "./src/main/resources/application.properties"
  • application.properties 파일에서도 변수로 작성한다.
  • 변수로 지정했기 때문에 외부로 노출이 되어도 안심할 수 있다.
  • 다만 저대로는 로컬에서 빌드가 되지 않기 때문에 깃허브에 푸쉬를 한 뒤에 로컬에서는 변수를 풀고 사용하여야 한다.
  • 대시보드 -> 작업공간에서 application.properties 파일을 확인해보자
  • 변수로 지정한 요소들이 변환되어 보인다.
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함