Notice
Recent Posts
Recent Comments
Link
반응형
관리 메뉴

쿵야지식떨이

GitHub Actions 적용 (3) - Git submodule 본문

Infra

GitHub Actions 적용 (3) - Git submodule

김쿵야 2024. 2. 22. 12:30
반응형

프로젝트를 진행할 때 보여주고 싶지 않은 민감 정보를 담은 yml 파일이 존재한다.

submodule을 사용하여 특정 폴더만 private로 설정하여 노출을 막을 수 있다!


submodule

  • Git 프로젝트에서 다른 Git 프로젝트를 하위 디렉토리에 포함시키는 방법

submodule 적용 과정

1. public repository에 프로젝트 파일 업로드

 

2. 민감한 정보를 담을 private repository 생성

  • application.yml 파일을 private repository에 생성하여 추가

  • public repository에 존재하는 민감한 정보를 private repository로 옮기고 clone 시에만 연동해서 가져온다고 생각하면 된다.  

3. public repository에 submodule 등록

git submodule add 서브모듈로 등록할 github repo 주소

ex) git submodule add https://github.com/~~~
  • 위 명령어로 등록하면 프로젝트의 최 상위 경로에 submodule의 repository name을 가진 폴더가 생성된다.

 

4. .gitmodules 확인

  •   위 모든 과정을 거치면 위 프로젝트 폴더 이미지에서 볼 수 있듯이 최 상위 폴더에 .gitmodules 파일이 생성된다.
[submodule "config-repo"]
	path = config-repo
	url = https://github.com/gummy-murderer/config-repo.git
  • .gitmodules 파일은 submodule repo의 경로와 url을 알려준다.
  • 메인 프로젝트를 github에 push 하면 main 프로젝트(public repository)에 submodule(private repository)가 생성된다.

  •   public repository 이더라도 위 submodule 폴더는 private repository 권한이 없는 유저는 접근 불가

5. submodule의 파일이 수정되었다면?

git submodule update --remote
  • 위 명령어를 통해서 submodule의 최신 내용을 메인 프로젝트에 갱신할 수 있다.
  • main project를 새로 clone 하였을 경우에도 위 명령어를 통해서 submodule을 받아올 수 있다.

6. gradle을 submodules의 내용을 빌드 시 가져오기

  • submodules 폴더에 있는 yml 파일들을 빌드 시에 “프로젝트 명/src/main/resources” 경로로 가져오게 하는 작업이 필요하다.
  • build.gradle에 아래 코드 추가
task copyPrivate(type: Copy) {
	copy{
			from 'submodule폴더'
			include "application.yml"
			into 'src/main/resources'
	}
}
  • from : submodule의 폴더
  • include : 포함할 파일
  • into : 빌드 시 넣을 경로
  • gradle이 copyPrivate task를 수행할 때 from 경로의 repo에 있는 application.yml 파일을 메인 프로젝트의 src/main/resources 에 복사하라는 의미
  • 나는 위 코드와 아래의 코드도 추가해줬다.
tasks.named('build').configure {
    dependsOn(copyPrivate)
}
  • 위 코드는 Gradle의 build 작업이 실행되기 전에 copyPrivate 작업이 먼저 실행되도록 설정하는 코드이다.
  • dependsOn(copyPrivate) 코드는 'build' 작업이 'copyPrivate' 작업에 의존한다는 것을 나타낸다.

'build' 작업이 실행되기 전에 'copyPrivate' 작업이 먼저 실행되어야 함을 의미한다.

  • 위처럼 설정 시 submodule에서 application.yml 파일을 복사하는 것을 build 작업 전에 항상 실행되도록 할 수 있다.

 

  • 위 작업 후에 bulid.gradle refresh 필수!!
  • intellij 기준 오른쪽 바에서 Gradle → Tasks → other → copyPrivate를 실행

 

❗❗수정 사항이 있을 경우

  • 아래 코드를 터미널에 입력하고 copyPrivate task를 실행해 주면 된다. 
git submodule update --remote $ {submodule_repository_name}
  • copyPrivate task를 실행하면 local에 수정사항이 반영될 것이다.

❗❗ copyPrivate 실행 후 해당 이력 Main 프로젝트에 commit, push

  • 현재 수정사항은 local에 반영이 되었지만 main에 merge된 상태는 아니다.
  • 변경 사항을 main에 push 해주어야 한다!
git status
  • 위 git status를 입력하면 새로 commit된 submodule이 보인다.

  • 위 이력을 아래와 같이 commit, push 해준다.
git add config-repo
git commit -m "원하는 커밋 메시지"

// 커밋 메시지를 잘못입력했다면?
git commit --amend -m "수정한 커밋 메시지"

 

반응형