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?

Biene
quelle

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.

user54
quelle
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
Ashu
quelle