Jenkins / Hudson 빌드 기록을 지우려면 어떻게하나요?


87

최근에 허드슨 빌드 중 하나의 구성을 업데이트했습니다. 빌드 기록이 동기화되지 않았습니다. 내 빌드 기록을 지우는 방법이 있습니까?

제발 감사합니다


"완전히 엉망진창"에 대해 자세히 설명해 주시겠습니까? 누군가 이전에 비슷한 문제를 경험 한 적이있을 것이며 해결 방법을 알려줄 수 있습니다.
Rob Hruska 2010 년

모호함에 대해 죄송합니다. 결정된.
myusuf3 2010 년

새로운 약간 더 구체적인 질문은 여기에 있습니다 : stackoverflow.com/questions/13052390/...은
유안 르 그랑


여기 내가 찾은 최고의 대답은 : superuser.com/questions/1418885/...
아스마 쥬 바이 르

답변:


51

Manage Hudson / Reload Configuration From Disk를 클릭하면 Hudson이 모든 빌드 이력 데이터를 다시로드합니다.

디스크의 데이터가 엉망인 경우 % HUDSON_HOME % \ jobs \ < projectname > 디렉터리 로 이동하여 예상대로 빌드 디렉터리를 복원해야합니다. 그런 다음 구성 데이터를 다시로드하십시오.

단순히 모든 빌드 기록을 제거하는 방법을 묻는 경우, 빌드가 몇 개만있는 경우 UI를 통해 하나씩 삭제하거나 % HUDSON_HOME % \ jobs \ < projectname > 디렉토리 로 이동하여 모든 빌드를 삭제할 수 있습니다 . 거기에있는 하위 디렉터리-빌드에 해당합니다. 그런 다음 변경 사항을 적용하려면 서비스를 다시 시작하십시오.


"/ var / lib / jenkins / jobs / Demo"내부의 모든 파일과 폴더를 삭제했지만이 작업 내부의 Jenkins UI로 이동하면 여전히 빌드 기록이 표시됩니다.

1
디렉토리 구조를 "원숭이"한 후 "Jenkins 관리"로 이동하여 "디스크에서 구성 다시로드"를 선택합니다.
DanBaker 2014 년

1
@paul, 거기에서 폴더를 삭제 한 후 Jenkins를 다시 시작 해야 UI에서 사라진 빌드 기록을 볼 수 있습니다. BTW, Jenkins를 사용하는 경우 경로는 일반적으로 / var / jenkins_home / jobs / {project name} / builds /에 있습니다.
Bright

이 솔루션은 시스템 측면에서 많은 단계를 거쳐야한다고 생각합니다. @Nayana Adassuriya의 답변에서 훨씬 더 깨끗한 솔루션이 제공됩니다
lfn

109

스크립트 콘솔 (Jenkins 관리> 스크립트 콘솔) 및이 스크립트와 유사한 것을 사용하여 작업의 빌드 기록을 대량 삭제합니다. https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

이 스크립트는 빌드 범위 만 삭제한다고 가정합니다. 특정 작업의 모든 빌드를 삭제하려면 다음을 사용하십시오 (테스트 됨).

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()

5
큰!! 확실히 최선의 접근 방식입니다! :)
hek2mgl

좋은 트릭이지만 빌드 카운터를 재설정하는 것은 어떻습니까? 그것에 대한 스크립팅이 있습니까?
Jes Chergui

1
@JesChergui 빌드 번호 재설정을 표시하도록 업데이트했습니다. 스크립트 콘솔을 사용하면 모든 종류의 것을 제어 할 수 있습니다. javadoc.jenkins-ci.org를 참조하십시오 (AbstractProject는 작업을 시작하기에 좋은 곳입니다)
rjohnston

내 Jenkins는 인스턴스 등에 액세스 할 수 없다고 불평했습니다. 이 삭제를 위해 특별히 설정 한 새 파이프 라인에서 실행 중이었고 위의 코드를 붙여넣고 이름을 변경했습니다.

@Will 이것은 파이프 라인 작업을 매우 제한적인 샌드 박스에 넣는 스크립트 보안 플러그인 때문입니다. "Jenkins 관리"> "처리중인 스크립트 승인"에서 승인 할 서명이 있는지 확인합니다. : 또 다른 옵션은 작업 관리자에 스크립트를 실행하는 Scriptler 플러그인의 능력을 사용하는 것입니다 wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin을
rjohnston

76

이 대답은 Jenkins입니다.

  1. Jenkins 홈페이지 → Jenkins 관리스크립트 콘솔로 이동합니다.

    여기에 이미지 설명 입력

  2. 거기에서 다음 스크립트를 실행하십시오. 변경 copy_folderyour project name

암호:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

내 게시물


4
우수 답변까지
드미트리 Zaytsev

1
이것이 가장 빠른 솔루션입니다.
davegallant

예,하지만 이번에는 Jenkins를 다시 시작하지 마십시오. 그렇지 않으면 다시 시작한 후 빌드를 수행 할 때 nextbuildnumber를 1로 업데이트하지 않는 것 같습니다. 제 39 세에 시작해서 다시해야 했어요.

Jenkins 2.75 기준으로 작업
ѺȐeallү

22

또 다른 옵션은 cURL로 빌드를 삭제하는 것입니다.

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

위는 myJob 작업에 대한 빌드 # 1에서 # 56을 삭제합니다.

Jenkins 인스턴스에서 인증이 활성화 된 경우 사용자 이름과 API 토큰을 다음과 같이 제공해야합니다.

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

API 토큰은 /me/configureJenkins 의 페이지에서 가져와야합니다 . "Show API Token ..."버튼을 클릭하면 사용자 이름과 API 토큰이 모두 표시됩니다.

편집 : 하나를 교체해야 할 수도 있습니다 doDeleteAll에 의해 doDelete구성이나 사용 젠킨스의 버전에 따라이 작업을하기 위해 위의 URL에서.


10

Jenkins 스크립팅을 사용하여 모든 작업에 대한 모든 빌드를 삭제하는 방법은 다음과 같습니다.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

9

프로젝트 구성을 임시로 수정하여 마지막 1 개의 빌드 만 저장하고 구성을 다시로드 한 다음 (이전 빌드를 폐기해야 함) 구성 설정을 원하는 값으로 다시 변경할 수 있습니다.


죄송합니다. 몇 년 동안 Hudson을 사용하지 않았지만 구성을 다시로드하는 방법에 대해서는 다음을 참조하십시오. stackoverflow.com/questions/5216552/…
the_mandrill 2014

Jenkins에 대한 관리자 권한이없는 사람으로서 이것이 저에게 도움이 된 유일한 옵션이었습니다.
DrStrangepork

4

MultiBranchProject (예 : 파이프 라인)의 빌드 기록을 지우려면 Jenkins 홈 페이지 → Jenkins 관리 → 스크립트 콘솔로 이동하여 다음 스크립트를 실행합니다.

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}

4

이것은 가능한 최상의 옵션입니다.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

이 코드는 모든 Jenkins 작업 빌드 기록을 삭제합니다.


2
위 코드를 실행하는 방법을 궁금해하는 사람은 Jenkins Home> Manage Jenkins> Script Console로 이동하십시오. 이 스크립트를 입력 할 수있는 텍스트 필드가 있습니다.
바로 도구

2

스크립트 콘솔 사용.

작업이 그룹화 된 경우 슬래시로 전체 이름을 지정할 수 있습니다.

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

또는 다음과 같이 계층 구조를 탐색하십시오.

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

2

파일 시스템에서 직접 삭제하는 것은 안전하지 않습니다. 아래 스크립트를 실행하여 모든 작업 (재귀 적으로)에서 모든 빌드를 삭제할 수 있습니다.

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}


1

%HUDSON_HOME%\jobs\<projectname>제거 builds디렉토리로 이동하여 lastStable, lastSuccessful링크를 제거하고 nextBuildNumber파일을 제거 하십시오.

위의 단계를 수행 한 후 UI
Jenkins-> Manage Jenkins-> Reload Configuration from Disk 에서 아래 링크로 이동하십시오.

당신이 필요로 할 것입니다


1

스크립트 콘솔 방법을 사용하는 경우 작업이 폴더 컨테이너로 그룹화되는지 고려하기 위해 대신 다음을 사용하십시오.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

또는

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

0

로 이동: %JENKINS_HOME%\jobs\jobName

"nextBuildNumber"파일을 열고 번호를 변경하십시오. 그 후 Jenkins 구성을 다시로드하십시오. 참고 : "nextBuildNumber"파일에는 Jenkins에서 사용할 다음 빌드 번호가 포함되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.