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?

abeille
la source

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.

user54
la source
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
Ashu
la source