Holen Sie sich alle Änderungsprotokolle seit dem letzten erfolgreichen Build in Jenkins Pipeline


11

In meiner Jenkins-Pipeline kann ich dadurch Änderungsprotokolle des aktuellen Builds abrufen.

def changeLogSets = currentBuild.changeSets

Gibt es eine Möglichkeit, alle Änderungsprotokolle seit dem letzten erfolgreichen Build abzurufen?

Antworten:


9

Sie können so etwas versuchen:

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

Darüber hinaus können Sie "Änderungen seit dem letzten erfolgreichen Plugin" ausprobieren: https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin

Es wird jedoch nicht mit der Pipeline zusammenarbeiten. Dies ist ein separater Ansatz.


Es scheint, dass diese Lösung die Änderungsprotokolle der letzten erfolgreichen Builds enthält. Was ich eigentlich gesucht habe, waren Änderungsprotokolle (der letzten erfolglosen Builds) seit dem letzten erfolgreichen Build. Aber Ihre Antwort ist auf jeden Fall hilfreich. Build.getpreviousebuuld () und Rekursion war das, was ich vermisst hatte. Vielen Dank für die Antwort.
Biene

1
Immer willkommen ;-)
user54

Ich vermute, dass bei der rekursiven Lösung Probleme auftreten können, wenn der Stack nicht mehr ausreicht. Es wäre jedoch nicht zu schwierig, zu einem iterativen Prozess zu wechseln.
Zeichnen

1

Wie ich vielleicht festgestellt habe, hilft Ihnen dieser Wille. Mit dieser Funktion können Sie die neueste erfolgreiche Build-Änderungsprotokolldatei aller mit Jenkins erstellten Projekte abrufen.

$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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.