[Jenkins] ERROR: Error fetching remote repo 'origin' (권한 문제)

2025. 3. 18. 20:37Trouble Shootings/Infrastructure

 

1. 문제가 발생한 상황

Springboot CI/CD를 위한 `Jenkins Pipeline`을 짜고 있었는데, `Docker`로 띄워진 `Jenkins`에겐 파일 생성 및 복사 권한이 없어서 실패했습니다.

withCredentials([file(credentialsId: 'jasypt-encryption-key', variable: 'JASYPT_KEY_FILE')]) {
    sh 'cp $JASYPT_KEY_FILE ./src/main/resources/application-key.yml'
    sh './gradlew clean build -x test'
}

 

이와 같은 경우, 1)해당 디렉토리의 권한을 Jenkins에게 주거나, 2)Jenkins 컨테이너를 실행할 때, 루트 권한으로 실행하는 방법이 있습니다. 저 같은 경우에는 1번 방법을 수행하다가 잘 안 되는 것 같아, 2번 방법으로 진행하였습니다.

 

2. 또 다른 오류 발생: Git 권한 문제

 

하지만, 이번엔 루트 권한으로 재실행한 Jenkins에서 다시 파이프라인을 수행하니, GitLab 저장소에서 Jenkins로 소스 코드를 가져오지 못하는 문제가 발생했습니다.

ERROR: Error fetching remote repo 'origin'

 

이는 Jenkins 컨테이너를 처음엔 기본 사용자가 소유하고 있었는데, 루트 사용자가 소유하도록 재시작했기 때문입니다. Jenkins 설정 파일들을 영구 저장해두기 위해 Docker Volume을 통해 마운트하여 데이터를 유지했지만, 데이터를 유지했기 때문에 루트 사용자의 파일과 Jenkins 기본 사용자의 파일이 섞이게 된 것이죠.

 

즉, 루트 사용자로 실행된 Jenkins 컨테이너 입장에선 이전에 테스트하려고 가져왔던 Git Repository 파일들이 모두 외부인의 파일로 인식되는 것이죠. 그래서, 위와 같은 오류가 떴던 것이었습니다.

 

소름돋았습니다. Linux 시스템에 대해 그리 능숙한 게 아니기 때문에, 전혀 상상도 못했던 문제였죠.

 

3. 해결 방법

  1. 컨테이너 사용자를 변경할 땐, 워크스페이스를 초기화한다.
  2. 사용자는 그대로 두되, 특정 디렉토리 및 파일에 대해서만 해당 사용자에게 권한을 준다.

 

저는 일단 2번 방법으로 다시 가보기로 했습니다.. 하다가 안 되면 뭐 1번 방법으로 가야겠지요.

 

 

728x90
반응형