Obtenga todos los registros de cambios desde la última compilación exitosa en Jenkins Pipeline

11

En mi canalización de Jenkins, puedo obtener registros de cambios de la compilación actual con esto.

def changeLogSets = currentBuild.changeSets

¿Hay alguna forma de obtener todos los registros de cambios desde la última compilación exitosa?

abeja
fuente

Respuestas:

9

Puedes probar algo como esto:

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

Además, puede probar "Cambios desde el último complemento de éxito": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Pero no funcionará junto con la tubería, este es un enfoque separado.

usuario54
fuente
Parece que esta solución proporciona los registros de cambios de las últimas compilaciones exitosas. Lo que realmente estaba buscando eran registros de chnage (de las últimas compilaciones fallidas) desde la última compilación exitosa. Pero su respuesta es definitivamente útil. Build.getpreviousebuuld () y recursión fue lo que me había perdido. Muchas gracias por la respuesta.
Abeja
1
Siempre bienvenido ;-)
usuario54
Sospecho que la solución recursiva podría tener problemas si se agota la pila si tuviera que pasar por muchas compilaciones. Sin embargo, no sería demasiado difícil cambiar a un proceso iterativo.
2017
1

Como descubrí puede ser que esto te ayudará. Con esto, puede obtener el último archivo de registro de cambios de compilación exitoso de cualquier compilación de proyecto 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
Ashu
fuente