Dapatkan semua log perubahan sejak bangunan terakhir yang berhasil di Jenkins Pipeline

11

Dalam pipa Jenkins saya, saya bisa mendapatkan log perubahan dari bangunan saat ini dengan ini.

def changeLogSets = currentBuild.changeSets

Apakah ada cara untuk mendapatkan semua log perubahan sejak build terakhir yang berhasil?

Lebah
sumber

Jawaban:

9

Anda dapat mencoba sesuatu seperti ini:

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;
}

Selain itu, Anda dapat mencoba "Perubahan Sejak Plugin Sukses Terakhir": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Tapi itu tidak akan bekerja sama dengan pipeline, ini adalah pendekatan terpisah.

pengguna54
sumber
Tampaknya solusi ini memberikan log perubahan dari build succesaful terakhir. Apa yang sebenarnya saya cari adalah chnage log (dari build terakhir yang gagal) sejak build terakhir yang sukses. Tetapi jawaban Anda pasti membantu. Build.getpreviousebuuld () dan rekursi adalah apa yang saya lewatkan. Terima kasih banyak atas jawabannya.
Bee
1
Selalu diterima ;-)
user54
Saya menduga bahwa solusi rekursif mungkin mengalami masalah kehabisan tumpukan jika Anda mengalami banyak build. Tidak akan terlalu sulit untuk beralih ke proses berulang.
drewish
1

Seperti yang saya temukan mungkin ini akan membantu Anda. Dengan ini, Anda dapat mengambil file log perubahan build yang berhasil terbaru dari build proyek apa pun dengan Jenkins.

$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
Ashu
sumber