본문 바로가기

개발일지/TIL

[230720] [미니] 모여봐요 인생네컷 Jenkins Git Submodule Clone 문제

Jenkins에서 Git Clone시 Submodule이 같이 Clone이 안 되는 문제

✔ 원인

💢 Submodule 설정 이후 Jenkins에서 자동 빌드 & 배포를 했다. 그런데 application.properties가 없어서 정상적으로 애플리케이션이 서버에서 실행이 되지 않았다. 문제는 Jenkins에서 Git Repository Clone 할 때 Submodule Repository를 가져오지 않아 application.properties 파일이 누락된 것이었다.

 

✔ 원인이 되는 Jenkinsfile Script

 

stage('Prepare') {
  steps {
    echo 'Clonning Repository'
    git url: 'git@github.com:mini-project-evey-team/four-cuts-backend.git',
      branch: 'main',
      credentialsId: 'github'
    }
}

 

✔ 해결 방법

✅ Git Clone을 할 때 "--recursive" 옵션을 추가해 줘야 Submodule까지 가져온다는 것을 알았다. 그런데 기존 Script 방식의 경우 별도로 --recursive 옵션을 줄 수 있는 방식을 찾지 못했다. 그래서 Script 형식을 조금 변경해 옵션 적용을 해줬다.

 

✔ 해결 적용 코드

 

stage('Prepare') {
    steps {
        withCredentials([GitUsernamePassword(credentialsId: 'github', gitToolName: 'Default')]) {
            sh '''
            git clone --recursive https://github.com/mini-project-evey-team/four-cuts-backend.git
            '''
        }
    }
}

 

✔ 적용 이후 또 다른 문제

💢 Jenkins에서 sh 명령어로 Git Clone 해오는 방식으로 변경했다. 이것 때문에 첫 번째 배포 때는 문제가 되지는 않았지만 두 번째 배포부터는 Workspace에 동일한 이름의 Repository가 있다는 에러가 발생했다.  

 

✔ 해결 방법

✅ sh 명령어를 통해 Git Clone을 해오는 경우 별도의 이름을 지정해서 중복을 피하지 않으면 폴더가 겹쳐 문제가 발생한다. 시작할 때 기존 Jenkins의 Workspace를 비워서 해결을 했다.

 

✔ Jenkinsfile에 Sciprt 추가

deleteDir()

생각

어떤 문제를 해결하면 또 다른 문제를 만나는 경우가 많은 것 같다. 그런 과정을 거치다 보면 성장한다는 것을 알기에 묵묵히 해나갈 뿐이다. 그리고 다양한 해결 방법 중 가장 나은 방식을 찾기 위해 노력을 해야겠다. "일단 되는 것"이라는 생각을 가지고 많이 했는데, 왜 이 해결책을 사용해야 하는지에 대해서 더 고민해야겠다. 더 나은 방식은 없는지 생각해야겠다.