2016-06-28 3 views

Antwort

11

Nun, ich schaffte es, etwas zusammen zu werfen. Ich bin mir ziemlich sicher, dass ich Ihnen die Arrays besser laufen kann, aber hier ist das, was ich jetzt habe:

node('Android') { 
    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; 
    } 
0

Es gibt die Changes Since Last Success Plugin, die Ihnen dabei helfen könnte.

+1

Aber funktioniert nicht mit [tag: jenkins-pipeline], denke ich .. – StephenKing

+0

Ja, ich habe das überprüft, aber konnte nicht herausfinden, wie man es von der JenkinsFile – CaptRespect

3

Basierend auf der Antwort von CaptRespect i in der deklarativen Pipeline für die Verwendung mit dem folgenden Skript kam:

Dies ist sehr nützlich in stage->when->expression Teile, um eine Phase nur auszuführen, wenn bestimmte Dateien geändert wurden. Ich bin jedoch noch nicht an diesen Teil gekommen, ich würde gerne eine gemeinsame Bibliothek daraus erstellen und es möglich machen, einige Globbing-Muster zu übergeben, nach denen ich suchen kann.

EDIT: Check the docs BTW, falls Sie ein wenig tiefer eintauchen wollen. Sie sollten in der Lage sein, alle object.getSomeProperty() Anrufe in nur entry.someProperty umzuwandeln.

+0

Nizza. Es gibt einen Github-Repo mit einigen Pipeline-Beispielen, wenn Sie daran interessiert sind: https://github.com/jenkinsci/pipeline-examples – CaptRespect

+0

Dies ist nicht der deklarative Pipeline-Stil, sondern die Skript-Pipeline! – Lincoln

+1

@ Lincoln, yup. Sie können es nicht deklarativ tun. Sie müssen es in einen Skriptblock einfügen oder aus einer gemeinsam genutzten Bibliothek verwenden. – andsens

Verwandte Themen