GitLab CI/CD: 아티팩트 업로드 실패 및 500 오류 해결 가이드
GitLab Pipeline 실행 중 빌드 결과물(Artifacts)을 서버로 전송하는 단계에서 갑자기 500 Internal Server Error가 발생하며 작업이 중단되는 경우가 있습니다. 이 문서는 해당 오류의 원인인 서버 디스크 용량 부족 문제를 진단하고 해결하는 방법을 설명합니다.
1. 증상 및 로그 분석
파이프라인 로그의 Uploading artifacts... 단계에서 다음과 같은 재시도 메시지와 오류가 반복적으로 나타납니다.
Uploading artifacts...
/builds/gknu/gknu/target/gknu: found 10726 matching artifact files and directories
...
WARNING: Uploading artifacts as "archive" to coordinator... 500 Internal Server Error
WARNING: Retrying... context=artifacts-uploader error=invalid argument
...
FATAL: invalid argument
ERROR: Job failed: exit code 1
NOTE
빌드 서버(Runner) 자체의 디스크가 충분하더라도, 결과물을 받아 저장하는 GitLab 메인 서버의 디스크가 가득 찬 경우에도 위와 동일한 500 에러[1]가 발생합니다.
2. 원인 진단
가장 먼저 서버에 접속하여 실제 디스크 사용량을 확인해야 합니다. 특히 GitLab 데이터가 실제로 저장되는 볼륨의 잔여 공간을 확인하는 것이 중요합니다.
# 디스크 사용량 확인
df -h
확인 결과 예시:
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 500G 73G 427G 15% /data
IMPORTANT
현재 시스템은 과거 용량 부족 문제로 인해 /data 볼륨을 신규로 할당받아 이미 한차례 이관을 완료한 상태입니다.
물리적인 데이터는 /data/service 경로에 저장되어 있으며, 관리 편의를 위해 루트 경로의 services 폴더가 이를 바라보도록 심볼릭 링크가 설정되어 있습니다.
# 설정된 심볼릭 링크 상태 (lrwxrwxrwx)
services -> /data/service
3. 해결 방법
방법 1: 불필요한 데이터 정리
본격적인 증설 전에 Docker의 캐시나 불필요한 이미지 등을 정리하여 임시 공간을 확보할 수 있습니다.
# 사용하지 않는 컨테이너, 네트워크, 이미지 일괄 삭제
docker system prune -f
방법 2: 데이터를 새로운 디스크로 마이그레이션
디스크를 추가 증설한 경우, 기존 /services/gitlab 하위의 data 디렉토리를 새로운 마운트 지점으로 옮겨야 합니다.
-
서비스 중단: 데이터 일관성을 위해 실행 중인 모든 컨테이너를 내립니다.
cd /services/gitlab docker compose down -
데이터 이동: 실제 데이터가 저장된
data폴더를 증설된 디스크 경로로 이동시킵니다.# 예: /new_disk 경로로 이동하는 경우 mv /services/gitlab/data /new_disk/ -
심볼릭 링크 생성: 기존
/services/gitlab/data경로를 통해 새로운 위치의 데이터를 참조할 수 있도록 심볼릭 링크[2]를 생성합니다.# /new_disk/data를 기존 경로인 /services/gitlab/data로 연결 ln -s /new_disk/data /services/gitlab/data -
서비스 재시작:
docker compose up -d
IMPORTANT
데이터를 옮길 때는 반드시 root 권한으로 실행하며, 파일 소유권과 권한이 그대로 유지되어야 서비스 기동 시 권한 오류가 발생하지 않습니다.
CAUTION
마이그레이션 작업 전에는 반드시 중요한 데이터를 백업하시기 바랍니다. 디스크 이동 중 예기치 못한 오류로 데이터가 손상될 수 있습니다.