Obtenez tous les journaux des modifications depuis la dernière construction réussie dans Jenkins Pipeline


11

Dans mon pipeline Jenkins, je peux obtenir des journaux de modifications de la construction actuelle par ceci.

def changeLogSets = currentBuild.changeSets

Existe-t-il un moyen d'obtenir tous les journaux des modifications depuis la dernière génération réussie?

Réponses:


9

Vous pouvez essayer quelque chose comme ceci:

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

De plus, vous pouvez essayer le plug-in "Modifications depuis le dernier succès": https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Mais cela ne fonctionnera pas avec le pipeline, il s'agit d'une approche distincte.


Il semble que cette solution donne les journaux des modifications des dernières versions réussies. En fait, je cherchais des journaux de chnage (des dernières versions non réussies) depuis la dernière version réussie. Mais votre réponse est certainement utile. Build.getpreviousebuuld () et la récursivité étaient ce que j'avais manqué. Merci beaucoup pour la réponse.
Bee

1
Toujours les bienvenus ;-)
user54

Je soupçonne que la solution récursive pourrait rencontrer des problèmes de manque de pile si vous l'aviez à travers beaucoup de builds. Il ne serait cependant pas trop difficile de passer à un processus itératif.
drewish

1

Comme je l'ai trouvé, cela vous aidera. Avec cela, vous pouvez récupérer le dernier fichier journal de modification de build réussi de n'importe quel projet avec 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.