ฉันจะล้างประวัติการสร้าง Jenkins / Hudson ได้อย่างไร


87

ฉันเพิ่งอัปเดตการกำหนดค่าของฮัดสันบิลด์หนึ่งของฉัน ประวัติการสร้างไม่ตรงกัน มีวิธีล้างประวัติการสร้างของฉันหรือไม่?

กรุณาและขอบคุณ


คุณสามารถอธิบายรายละเอียดเกี่ยวกับ "ความยุ่งเหยิงทั้งหมด" ได้หรือไม่? อาจมีใครบางคนเคยประสบปัญหาคล้าย ๆ กันมาก่อนและสามารถแนะนำวิธีแก้ไขให้คุณได้
Rob Hruska

ขออภัยเกี่ยวกับความไม่ชัดเจน แก้ไขแล้ว.
myusuf3

มีคำถามที่ใหม่กว่าและเจาะจงกว่าเล็กน้อยที่นี่stackoverflow.com/questions/13052390/…
Erwan Legrand

โพสต์นี้อาจช่วยได้codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya

นี่คือคำตอบที่ดีที่สุดที่ฉันพบ: superuser.com/questions/1418885/…
Asma Zubair

คำตอบ:


51

หากคุณคลิก Manage Hudson / Reload Configuration From Disk ฮัดสันจะโหลดข้อมูลประวัติการสร้างทั้งหมดซ้ำ

หากข้อมูลในดิสก์เกิดความสับสนคุณจะต้องไปที่ไดเร็กทอรี% HUDSON_HOME% \ jobs \ < projectname > และกู้คืนไดเร็กทอรีบิลด์ตามที่ควรจะเป็น จากนั้นโหลดข้อมูลการกำหนดค่าใหม่

หากคุณเพียงแค่ถามวิธีลบประวัติการสร้างทั้งหมดคุณสามารถลบบิวด์ทีละรายการผ่าน UI ได้หากมีเพียงไม่กี่รายการหรือไปที่ไดเร็กทอรี% HUDSON_HOME% \ jobs \ < projectname > และลบทั้งหมด ไดเรกทอรีย่อยที่นั่น - สอดคล้องกับการสร้าง หลังจากนั้นเริ่มบริการใหม่เพื่อให้การเปลี่ยนแปลงมีผล


ฉันได้ลบไฟล์และโฟลเดอร์ทั้งหมดใน "/ var / lib / jenkins / jobs / Demo" แล้ว แต่เมื่อไปที่ Jenkins UI ภายใน JOB นี้ฉันยังคงเห็นประวัติการสร้าง
พอล

1
หลังจากที่คุณ "ลิง" ด้วยโครงสร้างไดเร็กทอรีเพียงไปที่ "Manage Jenkins" แล้วเลือก "Reload Configuration From Disk"
DanBaker

1
@paul หลังจากลบโฟลเดอร์ที่นั่นจำเป็นต้องรีสตาร์ท Jenkins เพื่อดูประวัติการสร้างที่หายไปจาก UI BTW ถ้าเราใช้ Jenkins เส้นทางมักจะอยู่ที่ / var / jenkins_home / jobs / {project name} / builds /
Bright

ฉันคิดว่าการแก้ปัญหานี้ต้องใช้ขั้นตอนมากในด้านของระบบซึ่งมีคำตอบที่สะอาดกว่านี้จาก @Nayana Adassuriya
lfn

111

ใช้คอนโซลสคริปต์ (Manage Jenkins> Script Console) และสคริปต์นี้เพื่อลบประวัติการสร้างงานจำนวนมาก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

เจนกินส์ของฉันบ่นว่าไม่อนุญาตให้เข้าถึงอินสแตนซ์หรือแบบนั้น ฉันเรียกใช้จากไปป์ไลน์ใหม่ที่ฉันตั้งค่าโดยเฉพาะสำหรับการลบนี้และฉันวางโค้ดด้านบนและเปลี่ยนชื่อ
จะ

@ นี่เป็นเพราะปลั๊กอินความปลอดภัยของสคริปต์ซึ่งทำให้งานไปป์ไลน์อยู่ในแซนด์บ็อกซ์ที่มีข้อ จำกัด มาก ดูว่าคุณมีลายเซ็นที่จะอนุมัติใน "จัดการเจนกินส์"> "การอนุมัติสคริปต์ในกระบวนการ" หรือไม่ อีกทางเลือกหนึ่งคือการใช้ความสามารถของปลั๊กอิน Scriptler เพื่อเรียกใช้สคริปต์ผู้ดูแลระบบในงาน: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

คำตอบนี้สำหรับเจนกินส์

  1. ไปที่โฮมเพจ Jenkins ของคุณ→ จัดการ JenkinsScript Console

    ใส่คำอธิบายภาพที่นี่

  2. เรียกใช้สคริปต์ต่อไปนี้ที่นั่น เปลี่ยนcopy_folderเป็นyour project name

รหัส:

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

โพสต์ของฉัน


4
คำตอบที่ดีที่สุดจนถึงตอนนี้
Dmitry Zaytsev

1
นี่เป็นวิธีแก้ปัญหาที่เร็วที่สุด
davegallant

ใช่ แต่สำหรับอันนี้อย่ารีสตาร์ท Jenkins หรือดูเหมือนว่าจะไม่อัปเดต buildnumber ถัดไปเป็น 1 เมื่อคุณสร้างบิวด์หลังจากรีสตาร์ท ของฉันเริ่มต้นที่ 39 ดังนั้นฉันต้องทำซ้ำ
จะ

ทำงานตั้งแต่เจนกินส์ 2.75
ѺȐeallү

22

นี่คืออีกทางเลือกหนึ่ง: ลบงานสร้างด้วย cURL

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

ข้างต้นจะลบ build # 1 ถึง # 56 สำหรับ job myJob

หากเปิดใช้งานการตรวจสอบสิทธิ์บนอินสแตนซ์ Jenkins ต้องระบุชื่อผู้ใช้และโทเค็น API ดังนี้:

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

ต้องดึงโทเค็น API จาก/me/configureหน้าใน Jenkins เพียงคลิกที่ปุ่ม "Show API Token ... " เพื่อแสดงทั้งชื่อผู้ใช้และโทเค็น API

แก้ไข: อาจต้องแทนที่doDeleteAllด้วยdoDeleteใน URL ด้านบนเพื่อให้สามารถใช้งานได้ขึ้นอยู่กับการกำหนดค่าหรือเวอร์ชันของ Jenkins ที่ใช้


10

นี่คือวิธีการลบ BUILDS FOR ALL JOBS ...... โดยใช้ Jenkins Scripting

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

9

คุณสามารถแก้ไขการกำหนดค่าโปรเจ็กต์ชั่วคราวเพื่อบันทึกเฉพาะ 1 บิลด์สุดท้ายโหลดการกำหนดค่าใหม่ (ซึ่งควรทิ้งบิลด์เก่า) จากนั้นเปลี่ยนการตั้งค่าคอนฟิกอีกครั้งเป็นค่าที่คุณต้องการ


ขออภัยไม่ได้ใช้ Hudson มาสองสามปีแล้ว แต่ดูเกี่ยวกับการโหลดการกำหนดค่าซ้ำ: stackoverflow.com/questions/5216552/…
the_mandrill

ในฐานะคนที่ไม่มีสิทธิ์ระดับผู้ดูแลระบบให้กับ Jenkins นี่เป็นทางเลือกเดียวที่เหมาะกับฉัน
DrStrangepork

4

หากคุณต้องการล้างประวัติการสร้างของ MultiBranchProject (เช่นไปป์ไลน์) ให้ไปที่โฮมเพจ Jenkins →จัดการ 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()
}

4

อันนี้เป็นตัวเลือกที่ดีที่สุด

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

โค้ดนี้จะลบประวัติการสร้าง Jenkins Job ทั้งหมด


2
สำหรับใครที่สงสัยว่าจะรันโค้ดด้านบนอย่างไรให้ไปที่ Jenkins Home> Manage Jenkins> Script Console จะมีช่องข้อความที่คุณสามารถป้อนสคริปต์นี้ได้
Pharaoh Tools

2

ใช้ Script Console

ในกรณีที่มีการจัดกลุ่มงานคุณสามารถตั้งชื่อเต็มโดยใช้เครื่องหมายทับ:

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

อีกวิธีง่ายๆในการทำความสะอาดงานสร้างคือการเพิ่ม Discard Old Plugin ในตอนท้ายของงานของคุณ กำหนดจำนวนบิลด์สูงสุดที่จะบันทึกแล้วรันงานอีกครั้ง:

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


1

ไปที่%HUDSON_HOME%\jobs\<projectname>ลบbuildsdir และลบ lastStable, lastSuccessfulลิงก์และลบnextBuildNumberไฟล์

หลังจากทำตามขั้นตอนข้างต้นแล้วให้ไปที่ลิงค์ด้านล่างจาก UI
Jenkins-> Manage Jenkins -> โหลดการกำหนดค่าใหม่จากดิสก์

มันจะทำตามที่คุณต้องการ


1

หากใช้เมธอด Script Console ให้ลองใช้สิ่งต่อไปนี้แทนเพื่อพิจารณาว่างานถูกจัดกลุ่มไว้ในโฟลเดอร์คอนเทนเนอร์หรือไม่

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" มีหมายเลขบิลด์ถัดไปที่เจนกินส์จะใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.