รับบันทึกการเปลี่ยนแปลงทั้งหมดตั้งแต่สร้างสำเร็จครั้งสุดท้ายใน Jenkins Pipeline


11

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

def changeLogSets = currentBuild.changeSets

มีวิธีรับบันทึกการเปลี่ยนแปลงทั้งหมดหรือไม่ตั้งแต่สร้างสำเร็จครั้งล่าสุด

คำตอบ:


9

คุณอาจลองทำสิ่งนี้:

node('my_kubernetes_pod') {
    passedBuilds = []

    lastSuccessfulBuild(passedBuilds, currentBuild);

    def changeLog = getChangeLog(passedBuilds)
    echo "changeLog ${changeLog}"
}

def lastSuccessfulBuild(passedBuilds, build) {
    if ((build != null) && (build.result != 'SUCCESS')) {
        passedBuilds.add(build)
        lastSuccessfulBuild(passedBuilds, build.getPreviousBuild())
    }
}

@NonCPS
def getChangeLog(passedBuilds) {
    def log = ""
    for (int x = 0; x < passedBuilds.size(); x++) {
        def currentBuild = passedBuilds[x];
        def changeLogSets = currentBuild.rawBuild.changeSets
        for (int i = 0; i < changeLogSets.size(); i++) {
            def entries = changeLogSets[i].items
            for (int j = 0; j < entries.length; j++) {
                def entry = entries[j]
                log += "* ${entry.msg} by ${entry.author} \n"
            }
        }
    }
    return log;
}

นอกจากนี้คุณอาจลองใช้ "การเปลี่ยนแปลงตั้งแต่ปลั๊กอินสำเร็จครั้งสุดท้าย": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

แต่มันจะไม่ทำงานร่วมกับไปป์ไลน์นี่เป็นแนวทางที่แยกจากกัน


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

1
ยินดีต้อนรับเสมอ ;-)
user54

ฉันสงสัยว่าโซลูชันแบบเรียกซ้ำอาจมีปัญหาเมื่อใช้งานจนหมดหากคุณมีงานสร้างจำนวนมาก จะไม่ยากเกินไปที่จะเปลี่ยนเป็นกระบวนการวนซ้ำ
drewish

1

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

$DirectoryA = "D:\Jenkins\jobs\projectName\builds"  ####Jenkind directory
$firstfolder = Get-ChildItem -Path $DirectoryA | Where-Object {$_.PSIsContainer} | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$DirectoryB = $DirectoryA + "\" + $firstfolder

$sVnLoGfIle = $DirectoryB + "\" + "changelog.xml" 

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