Program Tip

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

programtip 2020. 10. 8. 18:53
반응형

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


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

제발 감사합니다


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

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

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


스크립트 콘솔 (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()

이 대답은 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()

내 게시물


또 다른 옵션은 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에서.


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


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

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

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

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

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


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

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()
}

빌드를 정리하는 또 다른 쉬운 방법은 작업 끝에 Discard Old Plugin을 추가하는 것입니다. 저장할 최대 빌드 수를 설정 한 후 작업을 다시 실행하십시오.

https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin


Go to the %HUDSON_HOME%\jobs\<projectname> remove builds dir and remove lastStable, lastSuccessful links, and remove nextBuildNumber file.

After doing above steps go to below link from UI
Jenkins-> Manage Jenkins -> Reload Configuration from Disk

It will do as you need


If using the Script Console method then try using the following instead to take into account if jobs are being grouped into folder containers.

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

or

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

Using Script Console.

In case the jobs are grouped it's possible to either give it a full name with forward slashes:

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

or traverse the hierarchy like this:

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

Deleting directly from file system is not safe. You can run the below script to delete all builds from all jobs ( recursively ).

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)
    }
  }
}```

Navigate to: %JENKINS_HOME%\jobs\jobName

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

참고 URL : https://stackoverflow.com/questions/3410141/how-do-i-clear-my-jenkins-hudson-build-history

반응형