Jenkins에서 일정 기간 이상 배포하지 않은 잡 찾기
오늘은 위의 주제로 찾아왔습니다! 사실 정말 간단한데, 사용이 익숙하지 않으신 분들은
폴더 하나씩 뒤져가며 찾으실 수도 있어서 좀더 편하게 쓰시라고 복붙을 위한 파이프라인을 준비하였습니다.
왜 필요한가요?
Jenkins를 운영하다 보면 너무 긴 기간동안 사용하지 않은 잡을 삭제하기도 하고,
부득이하게^^... 전체 배포를 해야 하는 경우가 발생하는데요, 그럴 때 배포가 잘 일어나지 않는 것들을
추려내기 위해서 사용하기도 합니다.
어떻게 하나요?
Jenkins pipeline을 사용할 줄 안다는 전제 하에 말씀드립니다.
1. 잡 생성에서 아래의 pipeline job을 하나 생성합니다.

2. pipeline에 아래의 내용을 복사 붙여넣기합니다.
import hudson.model.*
import com.cloudbees.*
getStaleJobs(Hudson.instance.items)
def getStaleJobs(items) {
def thresholdDays = params.daysBack.toInteger()
def dateCal = System.currentTimeMillis() - 1000L * 60 * 60 * 24 * thresholdDays
for (item in items) {
if (item.class.canonicalName == 'com.cloudbees.hudson.plugins.folder.Folder') {
getStaleJobs(((com.cloudbees.hudson.plugins.folder.Folder) item).getItems())
} else {
if (item.fullName.contains("$name")) {
def lastBuild = item.getLastSuccessfulBuild()
if (lastBuild != null && lastBuild.getTimeInMillis() < dateCal) {
lastBuild = lastBuild.getTime().format("yyyy-MM-dd")
println(item.name + " : " + lastBuild)
}
}
}
}
}
3. 파라미터에 String parameter로 name, daysBack 을 생성합니다.
4. 저장합니다.
5. Build with parameter에서 name에는 해당 잡의 이름(혹은 폴더명)의 일부를 입력합니다.
요걸 이렇게 만들어 둔 이유는, 잡이 매우 많을 경우를 대비하여 부하 방지를 위해 만들어 두었습니다~
만약에 잡이 FolderA/SubfolderA/DeploymentjobA 이런 뎁스를 가진다면
FolderA 를 입력하면 FolderA 내의 잡 전체가 대상이 되고, FolderA/SubfolderA 를 입력하면
FolderA 내의 SubfolderA 내의 잡 전체가 대상이 됩니다~
daysBack에는 검색할 일의 대상을 입력합니다. 소숫점은 당연 지원하지 않습니다 ㅎㅎ;;
6. 돌립니다!
7. 결과 확인

저는 365일 기준으로 돌렸고, 2020년 11월에 돌린 이후 빌드가 없었던 잡이 잘 검출되었네요~~!
요런 식으로 사용하시면 되겠습니다.
( ) 한 문제가 생겼어요!
1. 실패했고, administration 어쩌고 하는 에러가 떠요
-> sandbox가 체크되어있지 않나요? script approval을 주시거나 sandbox를 체크 해제하고 사용하시기 바랍니다
2. null pointer exception이 떠요
-> parameter를 생성하셨는지, 이름이 정확한지 확인하시면 되겠습니다~
이상입니다~즐건 젠킨스 생활 하세요~~