상황
gitlab runner 업그레이드 이후 ci/cd 과정에서 아래와 같은 에러가 발생했다.
커맨드와 스택오버플로우의 조언대로 아래 두 명령어를 사용해봤으나 동일한 에러가 계속 발생했다.
git config --global --add safe.directory /home/mining/dockerfiles/clickhouse
git config --global --add safe.directory '*'
소유권 에러 발생 원인
우선 해당 에러는 git을 업데이트하면서 보안정책이 변경돼 발생한다.
기존 git은 아래 두가지의 취약점이 존재했다.
1. Window에서 git 사용 시 dll 확장자 파일이 git uninstall을 강제실행할 수 있는 문제
2. 프로젝트들 경로 상위에 .git 폴더 생성 시 하위 프로젝트 사용자들의 config 설정값 모두가 노출되는 문제
두 취약점을 해결하기 위해 git은 repo 소유자와 명령 실행자가 일치할 때만 주요 명령을 실행할 수 있게 변경했고, 다른 경우에도 실행하려면 safe.directory 옵션을 추가해야한다.
git config --global 옵션이 작용하지 않는 이유
ci/cd는 gitlab-runner라는 사용자로 실행된다.
한편 git config --global --add safe.directory '*' 명령은 mining 계정에서 적용하였는데, --global 명령은 해당 사용자(mining)의 git config에만 설정을 적용하기 때문에 gitlab-runner 사용자의 config 에는 적용되지 않아 해당 에러가 계속 발생하게 된다.
해결 방법
아래와 같이 --system 옵션을 통해 모든 사용자의 git config에 적용할 수 있다.
git config --system --add safe.directory '*'
적용 결과는 다음과 같이 확인할 수 있다.
Reference
'서버 및 환경 > Git' 카테고리의 다른 글
[gitlab] gitlab runner의 permission denied 문제 (0) | 2024.05.22 |
---|---|
[git] gitignore 처리했는데도 여전히 파일 변경 내용을 추적하고 있을 때 (0) | 2024.05.10 |
[gitlab] server certificate verification failed 해결 (SSL 인증 문제) (0) | 2024.05.08 |
[gitlab] runner 재설치 시 decoding configuration file: toml ~ inv alid UTF-8 byte 문제 (0) | 2024.05.07 |
[git] gitignore 적용 안될 때 해결과 gitignore 적용 파일 리스트 확인 (0) | 2024.02.28 |