จะเขียน Pipeline เพื่อทิ้งงานสร้างเก่าได้อย่างไร?


88

properties: Set Job Propertiesเครื่องกำเนิดไฟฟ้าแรงไวยากรณ์ไม่ทำงานสำหรับขั้นตอนตัวอย่าง ฉันได้เลือกDiscard old buildsและป้อนข้อมูล10ในMax # of builds to keepฟิลด์แล้วGenerate Groovyและไม่มีอะไรปรากฏขึ้น

เจนกินส์เวอร์ชัน: 2.7.2


ใช้งานได้ดีสำหรับฉันกับ Jenkins 2.32.3
Michel Jung

คำตอบ:


182

สำหรับไวยากรณ์ที่เปิดเผยคุณสามารถใช้optionsบล็อก:

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30'))
  }
  ...
}

พารามิเตอร์สำหรับlogRotator(จากซอร์สโค้ด ):

  • daysToKeepStr: ประวัติจะถูกเก็บไว้จนถึงทุกวันนี้
  • numToKeepStr: บันทึกการสร้างจำนวนนี้เท่านั้นที่จะถูกเก็บไว้
  • artifactDaysToKeepStr: สิ่งประดิษฐ์จะถูกเก็บไว้จนถึงทุกวันนี้
  • artifactNumToKeepStr: เฉพาะจำนวนการสร้างนี้เท่านั้นที่มีอาร์ติแฟกต์เก็บไว้

ข้อมูลเพิ่มเติมสามารถพบได้ในฐานความรู้ CloudBeesและเอกสารสำหรับoptionsบล็อก


1
นี่ควรจะเป็นต่อสาขาหรือต่อท่อ? ดูเหมือนจะไม่ทำงานในสภาพแวดล้อมของฉัน
จมูก

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

ใครบางคนสามารถแสดงบริบทสำหรับการวางคำสั่งตัวเลือก buildDiscarder นี้ไว้ในบล็อกขั้นตอน (หลายไปป์ไลน์) ได้หรือไม่ ฉันพยายามแล้ว แต่การสร้างของฉันล้มเหลว
Christopher D. Emerson

54

คุณสามารถใช้propertiesวิธีการซึ่งซ้อนอยู่BuildDiscarderPropertyในคีย์ที่คุณต้องการตั้งค่าในที่สุด ฉันยังไม่มีวิธีที่มั่นคงในการค้นหาไวยากรณ์ที่ถูกต้องของแต่ละคีย์ หลังจากคาดเดาและตรวจสอบมาก:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10']]]);

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


1
วิธีนี้ใช้งานได้ แต่เหตุใดสิ่งนี้จึงซ้อนอยู่ในสองแผนที่และคุณทำงานอย่างไร
Rupert Madden-Abbott

ฉันกำลังดูคำตอบของคุณและฉันไม่เข้าใจว่ามันทำอะไร มันเก็บ 10 บิวด์ล่าสุดหรือ 10 วันที่ผ่านมา? ฉันสามารถเก็บงานสร้าง 10 สัปดาห์หรือ 3 เดือนล่าสุดได้หรือไม่ กรุณาอธิบายความหมายของแต่ละ*Strฟิลด์ในstrategy. สอนผู้ชายตกปลา ... ฯลฯ
Abhijit Sarkar

1
@AbhijitSarkar ตัวเลือกทั้งหมดมีอธิบายไว้ใน javadoc ของคลาสนั้น: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. ลิงก์ไม่อยู่ในคำตอบ 2. ถ้าฉันจะดู Javadoc ไม่จำเป็นต้องมีคำตอบ คำตอบควรจะสมบูรณ์มากที่สุด ลิงก์ภายนอกใช้ได้ตราบใดที่คัดลอกวางและอธิบายส่วนที่เกี่ยวข้องไว้ที่นี่
Abhijit Sarkar

1
@AbhijitSarkar ฉันไม่ใช่ OP ฉันแค่บอกให้คุณรู้ว่าคุณจะหาคำตอบได้ที่ไหน
61


17

Jenkins มีหน้าสร้างไวยากรณ์ในตัว

Pipeline-Syntax: Snippet Generator
<your jenkins url > / pipeline-syntax /

Pipeline-Syntax: Directive Generator
<your jenkins url > / directive-generator /

Discard old builds ตัวอย่างจาก Directive Generator ทิ้งตัวอย่างงานสร้างเก่า


8
  1. หากต้องการยกเลิกการสร้างหลังจากผ่านไปหลายวัน :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. หากต้องการยกเลิกการสร้างหลังจากจำนวนบิวด์ที่ระบุ :

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    

เพิ่งเพิ่มจำนวนวันในการเก็บงานสร้างนอกเหนือจากจำนวนงานสร้างทั้งหมดที่จะเก็บ :)
Jerald Sabu M

คุณควรใช้ความคิดเห็นสำหรับสิ่งประเภทดังกล่าว ฉันได้อัปเดตคำตอบตามนั้น
Vadim Kotov

ฉันไม่มีชื่อเสียงในการเพิ่มความคิดเห็น
Jerald Sabu M

ตอนนี้คุณมี แต่โดยทั่วไปถ้าคุณไม่มีชื่อเสียงคุณไม่ควรตอบแทนการแสดงความคิดเห็น
Vadim Kotov

6

คำตอบของ Vadim ไม่ได้ผลสำหรับฉันด้วยเหตุผลที่ไม่ทราบสาเหตุ ฉันทำให้มันง่ายขึ้นดังนี้และใช้งานได้ตอนนี้:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}

6

สำหรับไปป์ไลน์ที่เปิดเผยคุณสามารถเพิ่มสิ่งนี้:

options {

    buildDiscarder(
        logRotator(
            // number of build logs to keep
            numToKeepStr:'5',
            // history to keep in days
            daysToKeepStr: '15',
            // artifacts are kept for days
            artifactDaysToKeepStr: '15',
            // number of builds have their artifacts kept
            artifactNumToKeepStr: '5'
        )
    )
}

ขอบคุณ แต่คุณหาข้อมูลได้จากที่ไหน? รหัส?
silencej

1
jenkins-base-url:port if any/pipeline-syntax/ปกติผมทำมันได้จากที่นี่ ที่นี่ยังเป็นอีกหนึ่งjavadoc.jenkins.io/hudson/tasks/LogRotator.html ฉันยังดูซอร์สโค้ด github ของปลั๊กอินบางครั้งเพื่อทำความเข้าใจในรายละเอียด @silencej
bhordupur

2

หากคุณต้องการกำหนดค่าการเก็บรักษาบิลด์ในระดับงานไปป์ไลน์หลายสาขา (เทียบกับในแต่ละรายการJenkinsfile) สิ่งนี้ก็เป็นไปได้เช่นกัน: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

นอกจากนี้BuildRetentionBranchPropertyคุณสามารถกำหนดค่าอื่น ๆ*BranchPropertyได้ที่นี่: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

พวกเขาอาจไม่ปรากฏใน GUI แต่อย่างน้อยสำหรับฉันกับ Jenkins 2.73.2 แต่คุณยังสามารถใช้ JobDSL หรือแก้ไขconfig.xmlได้โดยตรง (ฉันไม่ได้พูดอย่างนั้นนะ ;-))


คุณกำลังพูดถึงJob DSL Pluginหรือไม่? ไม่ใช่สิ่งเดียวกับ Jenkins Pipelines ฉันหมายความว่าไม่ใช่ทุกคนที่ใช้ Pipelines กำลังใช้ Job DSL Plugin
Vadim Kotov

@VadimKotov ไม่ไม่จริง ฉันมีปัญหาในการกำหนดค่าการเก็บข้อมูลการสร้างใน Jenkins Pipelines ฉันไม่ต้องการทำเช่นนั้นใน Jenkinsfile แต่ในระดับงานแทน ฉันใช้ Job DSL ที่นี่ แต่มันไม่สำคัญจริงๆเพราะนี่เป็นเพียงวิธีการตั้งค่างานสร้างโดยอัตโนมัติ อย่างไรก็ตามดูเหมือนว่ามีข้อบกพร่องใน GUI ซึ่งป้องกันไม่ให้การตั้งค่าข้างต้นปรากฏขึ้นเมื่อคุณกำหนดค่างานสร้างด้วยตนเอง (JobDSL ไม่ทำอะไรที่คุณไม่สามารถทำได้ผ่าน GUI เป็นอย่างอื่น)
Torben Knerr

2

หากคุณต้องการวิธีทางโปรแกรม (เช่นการทำสิ่งนี้จากฟังก์ชันแทนที่จะใช้options{}ไวยากรณ์ไปป์ไลน์):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.