본문 바로가기
Tech/DevOps

[CI/CD] 민감정보를 어떻게 관리할 것인가 (application.properties)

by 싱브이 2024. 4. 24.
728x90
반응형

github actions를 통해 docker image를 생성하고 hub에 push 하는 CI를 구성하였지만 아직 문제가 남아있다!

application.properties 를 어떻게 처리할 것인가 !!!!!

application.properties에는 민감한 정보가 있어서 github에는 push 하지 않는데, 이게 있어야 구동이 된다! 딜레마

그래서 어떻게 ci에 포함시킬것인가? 가 오늘의 고민이었다.

내가 생각한 방법에는 3가지가 있다.

 

1. secret key로 관리
2. submodule 이용
3. docker-compose 이용 (컨테이너 실행 시 외부에서 properties를 주입 할 수 있도록 볼륨 사용

 

 

1번은 너무나도 쉬운 방법이고, 작은 나의 프로젝트에 아주 찰떡인 방법인 것 같지만 추후에 거대해질 나의 프로젝트를 기대하면서 패쓰하였다. (내용이 추가되면 가서 다시 고쳐야하는 번거로움(기존의 키도 보이지 않음)의 문제가 있을 듯하여 먼 길로 가보려고 한다.)

 

그래서 선택한 방법은 2번이다. private repository를 생성하여 submodule로 이용해보려고 한다.

 

3번도 좋은 선택이지만, 아직까지는 CD를 진행하지 않아서 굳이?란 생각이다.

추후에 배포를 하게 된다면 그 때 가서 3번 방법으로 옮길 생각이다.

 

그래서 지금 할 것은 2번 submodule 이용해보기 !!!

 


과정

 

1. private repository를 생성

private repository를 생성하고, application.yml을 생성했다.

(필요에 따라서 정보도 분리하여 따로 만들기도 하더라! 나도 프로젝트가 조금 더 커지면 분리할 생각이다!)

 

 

 

2.submodule을 추가

그리고 현재 프로젝트로 와서 submodule을 추가한다.

git submodule add {submodule_repository_url}

 

서브 모듈을 추가하면 .gitmodules 파일이 생성된다.

 

 

그리고 아래와 같이 막혀있는 것도 생긴다! 

 

그리고 이것을 메인 repo에 push 까지 해야한다 !! 꼭 !!

git add .
git commit -m "메시지"
git push 부모repo 브랜치

* Error: fatal: remote error: upload-pack: not our ref ~ 해결하기

 

 

3.submodule에 있는 파일을 복사

빌드될 때 submodule에 있는 파일을 복사해야한다.

 

build.gradle에 추가한다.

processResources.dependsOn('copySecret')

tasks.register('copySecret', Copy) {
    description = 'Copy submodules to project'

    from('./board_config') {
        include('*.yml')
    }
    into('src/main/resources')
}

 

 

4. github actions 적용

github actions에는 아래와 같이 추가한다.

    # Github Submodule에서 환경변수 가져오기
      - name: Checkout submodules
        uses: actions/checkout@v4
        with:
          submodules: recursive
          token: ${{ secrets.CONFIG_TOKEN }}
  • CONFIG_TOKEN 생성법은 이글을 참고 ! [링크]

 

결과

GitHub Actions 결과

 

 

Docker Hub 결과
Docker images

 

728x90
반응형

댓글