จะรีเซ็ตหมายเลขบิวด์ในเจนกินส์ได้อย่างไร?


90

ฉันใช้ Jenkins และ Gradle เพื่อสร้างโปรเจ็กต์ Java ของฉัน

ทุกครั้งที่สร้างโปรเจ็กต์ฉันจะได้รับหมายเลขบิลด์ใหม่บนหน้าจอเจนกินส์

ต่อไปนี้เป็นข้อมูลการสร้าง Jenkins ของฉัน:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

ฉันต้องการรีเซ็ตหมายเลขบิลด์เจนกินส์เช่น:

Success > Console Output  #1    03-Jan-2014 12:02:45

ฉันจะรีเซ็ตหมายเลขบิลด์ในเจนกินส์ได้อย่างไร

คำตอบ:


162

สามารถทำได้ง่ายขึ้นจากคอนโซลสคริปต์ที่น่าสนใจ ไปที่http: // your-jenkins-server / script ในหน้าต่างสคริปต์ให้ป้อน:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)

6
หรือทาง clijava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev

3
นี่คือคำตอบที่ดีที่สุดแน่นอน คุณไม่จำเป็นต้องใช้ลูปการลบหากคุณต้องการตั้งค่าตัวเลขเท่านั้น
นิค

ด้วยเหตุผลบางประการสิ่งนี้จะดำเนินการลบในรุ่นล่าสุดเท่านั้น แต่สิ่งต่อไปนี้ใช้ได้ผลสำหรับฉัน: echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
BRNTZN

คำถาม noob .. ฉันรู้ชื่องานที่แน่นอนได้อย่างไร
Ammar Mujeeb

@AmmarMujeeb ไปที่แดชบอร์ด Jenkins ของคุณแล้วคุณจะเห็นชื่องานที่นั่น คุณสามารถไป/var/lib/jenkins/jobs/ที่ Linux และชื่อของไดเร็กทอรีมีชื่องานที่แน่นอน
rickrizzo

62

จากที่นี่

กำหนดให้งานฮัดสันของคุณชื่อ FooBar

  • เปลี่ยนชื่อ FooBar เป็น FooBar-Copy
  • สร้างงานใหม่ชื่อ FooBar โดยใช้ตัวเลือก 'คัดลอกงานที่มีอยู่' จาก FooBar-Copy
  • ลบ FooBar-Copy

36
  • ขั้นแรกให้ล้างพื้นที่ทำงานและกำจัดงานสร้างก่อนหน้านี้
    • บนเซิร์ฟเวอร์ไปที่ dir งานเช่น 'var / lib / jenkins / jobs / myJob' ลบพื้นที่ทำงานและสร้าง dirs ตลอดจนไฟล์การสำรวจไฟล์ lastSuccessful ไฟล์ lastStable เป็นต้นคุณควรมี config.xml และ lastBuildNumber เท่านั้น
    • ปิดเจนกินส์โดยใช้บางอย่างเช่นบริการเจนกินส์หยุด
    • แก้ไขไฟล์ชื่อnextBuildNumberโดยใส่ 1 แทนหมายเลขบิลด์ปัจจุบัน
    • เริ่มเจนกินส์อีกครั้ง บริการเจนกินส์เริ่ม
    • ลงชื่อเข้าใช้เจนกินส์และไปที่งานของคุณและกดสร้าง ควรเริ่มสร้างงาน # 1

1
สิ่งนี้มีประโยชน์มาก ขอบคุณ.

23

หากคุณต้องการตั้งค่าหมายเลขบิลด์ถัดไปมีปลั๊กอิน "NextBuildNumber" สำหรับสิ่งนั้น แต่จะไม่ได้ผลในกรณีของคุณเนื่องจากหมายเลขรุ่นที่คุณต้องการซึ่งคือ 1 นั้นน้อยกว่าหมายเลขรุ่นปัจจุบันของคุณ

ที่นี่จำเป็นต้องล้างงานสร้างก่อนหน้าทั้งหมดก่อน คุณสามารถทำได้โดยเรียกใช้สคริปต์ง่ายๆนี้ ไปที่ -> จัดการเจนกินส์ -> คอนโซลสคริปต์

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

ตอนนี้คุณสามารถตั้งค่าหมายเลขบิลด์ถัดไปเป็น 1 และรันบิลด์ มันจะเริ่มต้นด้วย1 . :) มันง่ายมาก

อัปเดต - ตอนนี้ Jenkins มีปลั๊กอิน Purge Job History เพื่อให้เสร็จสิ้นในวิธีที่ง่ายที่สุด ดูรายละเอียดเพิ่มเติมในหน้า - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin


6

ในการรีเซ็ตหมายเลขบิวด์ของคุณเป็นN(โดยที่Nไม่จำเป็นต้องเป็น 1):

  • ลบใด ๆ buildNumber >= Nที่มีอยู่สร้างที่
  • แก้ไขProgram Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. Nตั้งค่าจำนวนจะมีการ
  • Manage Jenkins -> Reload Configuration from Diskจากเจนกินส์เลือก

ตรวจสอบให้แน่ใจว่าคุณได้อ่านข้อบกพร่องนี้ก่อนที่จะเลือก "โหลดการกำหนดค่าใหม่จากดิสก์" - issue.jenkins-ci.org/browse/JENKINS-32984
user3181500

6

ขยายคำตอบที่ได้รับการยอมรับต่อไปนี้เป็นวิธีดำเนินการสำหรับโครงการทั้งหมดพร้อมกัน:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  

4

ในฐานะที่เป็นคำตอบที่ยอดเยี่ยมของ @ antweiss เราสามารถไปได้ไกลกว่านี้ ...

ไม่จำเป็นต้องลบประวัติการสร้างทั้งหมดหากคุณไม่ต้องการคุณสามารถย้อนเวลากลับไปยังจุดก่อนหน้า:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

ถ้าคุณต้องการเรียกใช้หุ่นเพื่อตรวจสอบสิ่งที่มันจะทำไม่จริงทำมันเพียงแค่ความคิดเห็นออกbuild.delete()และitem.updateNextBuildNumber(resetNumberTarget)เส้นและ uncomment คำสั่งพิมพ์ต่างๆ


เอกสารประกอบ: รายละเอียดของวัตถุเหล่านี้หายาก แต่ฉันระบุสิ่งต่อไปนี้:


1

คุณสามารถใช้nexBuildNumberปลั๊กอินหรือเพียงแค่แก้ไขnexBuildNumberไฟล์เพื่อรีเซ็ตหมายเลขบิวด์ ต่อไปนี้เป็นขั้นตอนที่คุณต้องดำเนินการ:

  • ไปที่.jenkins/Jobs/<YourJobName>/build/สำรองข้อมูลของโฟลเดอร์นี้ (หากคุณต้องการใช้ในอนาคต) และลบโฟลเดอร์build

หมายเหตุ: เมื่อคุณล้างบิลด์เก่าคุณจะสูญเสียประวัติการสร้างและไม่สามารถใช้งานได้บนแดชบอร์ด Jenkins อีกต่อไป

  • โหลดการกำหนดค่าอีกครั้ง (Jenkins -> Manage Jenkins)
  • ตั้งค่าเวอร์ชันบิวด์ถัดไปเป็น 1 โดยใช้ปลั๊กอิน Next Build Number หรือแก้ไขnextBuildNumberไฟล์ในไดเร็กทอรี yourjob

0

ฉันพบวิธีง่ายๆในการทำสิ่งนี้

  1. เช็ดพื้นที่ทำงานของคุณ
  2. ไปที่แต่ละงานที่บันทึกไว้ใน Jenkins และลบออก
  3. ตั้งหมายเลขบิลด์เป็น 1 จากนั้นสร้าง

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



-1

ในการรีเซ็ตหมายเลขบิวด์ของงานทั้งหมด:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.