Jenkins는 빌드 후, 그 결과에 대한 파일을 아래의 경로 밑에 빌드 번호 디렉터리를 생성해서 저장한다.
JENKINS_JOBS/JOB_NAME/builds
# 기본 경로
/var/lib/jenkins/jobs/JOB_NAME/builds
이렇게 저장된 파일은 아래 사진처럼 웹에서 빌드 결과를 조회할 때 사용되는데,
오래된 빌드 결과는 가지고 있어 봐야 크게 쓸 곳은 없다. 특히 실시간에 가깝게 처리하는 Job은 디스크 용량이나 파일 수를 감당할 수 없어 정리가 필요하다.
따라서 이 글은 Jenkins 빌드 결과 삭제 방법에 대해 다룬다.
1. 웹 상에서
1.1 특정 빌드만 삭제
삭제할 작업의 삭제할 빌드를 선택해 들어간다.
표시한 빌드 삭제 버튼을 클릭하면 된다.
1.2 오래된 빌드 삭제 기능 사용
2021.12.12 - [Jenkins] Build 히스토리 삭제 - 2 글 참고할 것.
2. 터미널
2.1. 빌드 결과 저장 경로로 이동
cd JENKINS_HONE/JOB_NAME/builds
여기서 ls 또는 ll 명령어로 누적되어 있는 빌드 결과와 lastFailedBuild, LastStableBuild와 같은 고정 링크를 확인할 수 있다. 고정 링크는 Symbolic Link로 연결되어 있다.
2.2. 빌드 삭제
일반 디렉터리 삭제하는 것과 동일한 방법으로 삭제하면 된다.
rm -rf <BUILD_NUMBER>
여기서 오래된, 예로 들면 2개월 이전 빌드 히스토리는 모조리 삭제하고 싶다면 find 명령어를 이용해 삭제하면 된다.
# 2개월 이전 빌드 찾기
find ./ -maxdepth 1 -mtime +61 -type d
# -maxdepth : 검색 디렉토리 깊이 조정
# -mtime : modification time. 수정 시간 기준. +는 기준일 이전을 뜻한다.
# -type : 검색 파일 타입 지정. d는 디렉토리를 뜻한다.
# 2개월 이전 빌드 삭제
find ./ -maxdepth 1 -mtime +61 -type d -exec rm -rf {} \;
# -exec : 검색 파일에 대해 실행할 명령 지정
# {} : 찾은 파일 대입
# \; : 실행 명령어의 끝을 알림
참고로 exec 옵션을 사용하는 경우, 실행할 명령어의 범위는 exec 다음부터 ;(세미콜론)을 만날 때까지이다. 하지만 linux에서 세미콜론은 다중 명령을 위한 특수문자이기 때문에 find 명령은 실행시킬 명령어의 끝이 어딘지 알 수 없게 된다. 따라서 세미콜론 앞에 \를 붙여 특수문자의 의미를 제거해야 한다.
2.3. Reload Configuration from Disk
빌드 삭제를 완료했으면, Jenkins 관리 탭에서 Reload Configuration from Disk를 실행한다.
아마 웹 상에 남아있던 빌드 링크가 사라질 것이다.
……왜 추측하는 듯한 어조로 적어놓냐면, Reload Configuration from Disk을 못 했기 때문이다.
이 작업은 Jenkins 재시작은 아니고, Jenkins 프로세스를 유지하면서 설정을 업데이트하는 것으로 알고 있는데 아주 잠깐 Jenkins를 사용하지 못하는 것으로 알고 있다. 작업 수가 많을수록 좀 더 그럴 수 있고.
내가 작업한 Jenkins에는 실시간으로 돌고 있는 작업이 있는 탓에 작업에 영향을 줄 수도 있어 실제로 실행하지는 못 했다. 다행히 문제는 아직 없었고, 웹 상에서의 링크도 다음 날 정도 되면 사라져 있었다. 이건 아마 workspace clean up 설정 때문이 아닐까 의심 중이다.
+ 작업 후 몇 개월이 지나서 결과를 적어둔다. 결과적으로 Reload를 하지 않아도 아무런 이상이 없었다.
중간에 젠킨스나 서버 재기동이 있었기 때문에 마무리까지 다 된 상태지만, 서버 재기동 전에도 이용에는 큰 이상이 없었다. 다만 웹 상에서 삭제한 빌드 이력의 URL이 남아있긴 했으니, 그 부분만 염두해두면 될 것 같다.