Ottieni tutti i registri delle modifiche dall'ultima build riuscita nella pipeline Jenkins


11

Nella mia pipeline Jenkins, posso ottenere i registri delle modifiche della build corrente da questo.

def changeLogSets = currentBuild.changeSets

C'è un modo per ottenere tutti i registri delle modifiche dall'ultima build riuscita?

Risposte:


9

Puoi provare qualcosa del genere:

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

Inoltre, puoi provare "modifiche dall'ultimo successo plug-in": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Ma non funzionerà insieme alla pipeline, questo è un approccio separato.


Sembra che questa soluzione fornisca i registri delle modifiche delle ultime build riuscite. Quello che stavo effettivamente cercando erano i log chnage (delle ultime build non riuscite) dall'ultima build riuscita. Ma la tua risposta è sicuramente utile. Build.getpreviousebuuld () e la ricorsione erano ciò che mi ero perso. Grazie mille per la risposta.
Ape,

1
Sempre benvenuto ;-)
user54

Ho il sospetto che la soluzione ricorsiva potrebbe incorrere in problemi di esaurimento dello stack se avessi avuto molte build. Tuttavia, non sarebbe troppo difficile passare a un processo iterativo.
Drewish,

1

Come ho scoperto, questa volontà ti aiuta. Con questo è possibile recuperare l'ultimo file di registro delle modifiche di compilazione riuscito di qualsiasi build di progetto con 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.