피드로 돌아가기
My CI Runner Was Killed by My Own Script: The Dark Side of Cleanup
Dev.toDev.to
DevOps

불충분한 Path 제약 조건으로 인한 CI Runner 프로세스 강제 종료 및 서비스 중단

My CI Runner Was Killed by My Own Script: The Dark Side of Cleanup

Mustafa ERBAY2026년 5월 9일3beginner

Context

Self-hosted GitHub Actions Runner 환경에서 Disk Space 부족 문제 해결을 위해 자동 Cleanup Script를 도입한 구조. Docker Build Cache 및 Unused Images로 인한 최대 56GB의 디스크 점유 상태를 관리하려는 목적임.

Technical Solution

  • find 명령어를 통한 _work 디렉토리 내 7일 이상 경과된 파일의 일괄 삭제 로직 구현
  • maxdepthprune 옵션 부재로 인한 Runner Core Binary 및 Configuration 파일의 의도치 않은 삭제 발생
  • Runner 프로세스가 동작 중인 Working Directory 내 필수 파일을 제거함으로써 서비스의 Graceful Shutdown 유발
  • 파일 시스템 수준의 의존성을 고려하지 않은 단순 시간 기반 삭제 정책의 위험성 확인
  • 서비스 상태가 active (exited)로 표시되는 비정상 종료 현상을 통한 Root Cause 분석 수행

1. Cleanup Script 작성 시 `maxdepth`를 설정하여 삭제 범위의 깊이를 엄격히 제한할 것

2. `/tmp`나 `_work` 등 애플리케이션 실행 경로 내에서는 화이트리스트 기반의 삭제 대상 선정 방식을 채택할 것

3. 중요 파일 삭제 전 `dry-run` 모드를 구현하여 삭제 대상 리스트를 사전 검증할 것

4. 인프라 관리 스크립트 도입 시 서비스 생명주기와 파일 의존성을 매핑한 영향도 분석을 선행할 것

원문 읽기