1. 개요
2. Git Submodule이란?
3. 서브모듈 생성
4. 배포 시 적용
5. 주의사항
1. 개요
해당 프로젝트를 진행하는 동안 application.properties와 FCM 알림을 위해 service key를 관리해야 했다. 그 당시에는 메신저를 통해 백엔드 팀원들이 이를 공유받고, gitignore에 추가하는 방식으로 관리했다. 그러나 이렇게 관리할 경우 만약 이 어플을 운영해야 한다면 내용이 변경될 때 마다 서버에 파일을 올려야 한다. 이를 해결하기 위해 구구모 프로젝트에서는 git submodule을 사용했다. 이를 꿈나무 한입 프로젝트에도 적용시켜보도록 하자.
2. Git Submodule이란?
Github에서 서브모듈이란 main repository의 내부에 다른 서브 저장소를 디렉토리로 분류하여 넣어 따로 형상관리를 함을 뜻한다.
이 도구는 후술할 방법처럼 private하게 파일을 관리할 때 사용하거나, 외부 라이브러리를 사용할 때 메인 리포지토리의 내부에 넣어 사용하는 등의 방식으로 활용할 수 있다.
3. 서브모듈 생성
우선 리포지토리를 하나 새로 생성하여 관리할 파일들을 저장한다.
git submodule add https://github.com/TheperZ/a-Dream-Leaf-config.git config
서브모듈을 추가할 위치에 들어가서 해당 명령어를 cli에 입력하여 추가한다. 위 주소에 해당하는 리포지토리를 config라는 폴더명으로 서브모듈을 추가하는 명령어이다.
task copyGitSubmodule(type: Copy) {
from './config'
into './src/main/resources'
}
서브모듈은 config 폴더에 저장된다. 현재 작동하는 코드에 영향이 없으려면 해당 파일들을 resources로 옮겨야 한다. 그 역할을 하는 task의 코드이다.
4. 배포 시 적용
현재 프로젝트는 github action을 이용한 CI/CD가 적용된 상태이다. 배포 시 서브모듈도 같이 배포될 수 있도록 workflow를 수정해주어야 한다.
4-1 토큰 생성
위에서 생성한 a-Dream-Leaf-config는 private한 리포지토리이므로 토큰을 사용하여 접근해야 한다. 해당 토큰을 생성해보자.
settings->Developer Settings->Persoal Access Tokens로 들어가 generate new token(classic)을 클릭한다.
리포지토리에서 사용할 것이므로 repo를 체크하고, Generate token을 클릭한다.
토큰이 생성된다. 이는 한 번 밖에 볼 수 없고, 잃어버린다면 재발급을 받아야 한다. 이를 복사해준다. (해당 토큰은 게시글 작성을 위한 임시 토큰으로, 바로 삭제해주었다.)
4-2 토큰 저장 및 사용
이제 해당 토큰을 사용할 리포지토리의 Settings->Secrets and variables->Actions에 들어간다.
secret하게 관리할 환경변수를 관리하는 부분이다. New Repository sercret를 눌러준다.
변수명을 적고, Secret란에 방금 발급받은 토큰을 붙여넣고 저장해준다.
name: CICD Test
run-name: Running
on:
push:
branches:
- main
env:
...
working-directory: ./Backend/aDreamLeaf
jobs:
build-with-gradle:
runs-on: ubuntu-latest
steps:
- name: Checkout master branch
uses: actions/checkout@v3
with:
token: ${{secrets.ADREAMLEAF_PROPERTIES}}
submodules: true
ref: main
...
- name: 프로젝트 빌드(테스트 코드 제외)
run: |
./gradlew copyGitSubmodule
./gradlew clean build --exclude-task test
working-directory: ${{ env.working-directory }}
...
workflow에서는 checkout 시 위와 같이 입력하여 토큰을 사용하고, 프로젝트 빌드 전 방금 짠 task를 실행하여 ./src/main/resources로 파일을 이동시켜준다.
배포 시 서버가 정상 작동하는 것을 확인할 수 있었다.
5. 주의사항
서브모듈의 파일을 형상관리할 때, submodule은 리포지토리의 HEAD를 참조하는 것이 아닌 commit을 참조하고 있기 떄문에 submodule 내용이 업데이트되어도 같은 commit정보만 가져오게 된다.
따라서 submodule을 커밋한 후에는 해당하는 메인 리포지토리에서 커밋을 해주어야 해당 변경사항이 반영된다.
'Proj > aDreamLeaf' 카테고리의 다른 글
Git Action을 활용한 CI/CD (2) | 2024.08.07 |
---|---|
가게 정보 관련 RequestDto (0) | 2024.05.19 |
Hello, Refactoring! (0) | 2024.05.18 |