1. 문제
1) 문제 상황
Jenkins의 Built-In Node가 Disk space is below threshold 경고와 함께 오프라인 상태로 바뀌었습니다.
빌드는 대기상태로 바뀌었고 Jenkins 화면에는 디스크 부족 경고가 떠 있었습니다.

Jenkins의 내부 모니터링 로직이 /var/jenkins_home에 충분한 공간이 없다고 판단하고 오프라인 상태로 바꿔버린것 이었습니다.
Jenkins로 빌드할때 주로 Docker를 사용하기에 Docker 사용상태를 확인해보았습니다.
# docker 사용상태 확인
docker system df

확인 결과 Build Cache가 엄청나게 쌓여있는것을 확인하였습니다.
2) 문제 발생 원인
먼저 Docker로 이미지를 빌드할때는 레이어라는게 계층적으로 쌓여서 최종 이미지를 형성합니다. 또한 그 레이어들은 캐시로써 Docker 내부에 저장됩니다. Docker는 이런 캐시를 재활용하여 빌드 속도를 빠르게 하려고 합니다.
변경이 감지되지 않으면 기존 레이어를 재사용하지만, 변경이 있으면 새 레이어를 생성하고 이전 레이어는 다시 사용될수도 있으므로 남겨두게 됩니다.
밑의 문서에서는 Docker에서는 GarbageCollection을 적용해서 사용하지 않는 이미지를 정리한다고 나와있습니다.
하지만 여기에 일정 기준이 있는것 같습니다.

Default로 적용된 정책은 위와 같지만 제 캐시는 해당이 안되서 계속 쌓인것 같습니다.
추후 custom해서 정책을 설정할 수 있을 것 같습니다. 배포부터 빠르게 하고 나중에 깊게 공부해 봐야 할 것 같습니다.
https://docs.docker.com/build/cache/garbage-collection/
Build garbage collection
Learn about garbage collection in the BuildKit daemon
docs.docker.com
2. 문제 해결
1) 빌드 캐시 지우기

docker 문서에서 빌드 캐시 삭제 명령어를 찾아 이용하였습니다.
# 빌드 캐시 삭제
docker builder prune


빌드 캐시 삭제 -> Bring this node back online 버튼을 누르면 다시 빌드가 진행되는것을 확인할 수 있습니다.
만약 계속 오프라인 상태로 남아있다면 Jenkins를 재실행해보는것을 추천드립니다.
일단은 당장 배포를 진행하기 위해 빌드 캐시만을 삭제했지만, 추후 Garbage Collection을 custom해서 적용할 수 있을 것 같습니다.
'Infra' 카테고리의 다른 글
[Infra] Grafana, Loki로 Docker 컨테이너 모니터링 하기, 로그 모니터링 시스템 구축하기 (2) | 2025.03.05 |
---|---|
[Infra] Docker Certbot 인증서 발급 에러, Connection refused status: 400 에러, docker compose certbot 에러 (2) | 2025.01.17 |
[Infra] npm Unable to authenicate 에러, npm ERR! code401, .npmrc 에러 (0) | 2024.08.18 |
[Infra] Jenkins로 Slack에 알림 보내기 (0) | 2024.08.06 |
[Infra] Ngrok 사용법, 외부에서 내 로컬에 접속, local에서 Jenkins Webhooks 설정, Mac (0) | 2024.06.10 |