Quelqu'un a un script Jenkins Pipeline qui peut intégrer toutes les modifications depuis la dernière construction réussie d'une variable? J'utilise git et un travail de pipeline multibranches.
Eh bien, j'ai réussi à bricoler quelque chose ensemble. Je suis à peu près sûr de pouvoir mieux itérer les tableaux, mais voici ce que j'ai pour le moment:
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;
}
Basé sur la réponse de CaptRespect, j'ai développé le script suivant à utiliser dans le pipeline déclaratif:
def changes = "Changes:\n"
build = currentBuild
while(build != null && build.result != 'SUCCESS') {
changes += "In ${build.id}:\n"
for (changeLog in build.changeSets) {
for(entry in changeLog.items) {
for(file in entry.affectedFiles) {
changes += "* ${file.path}\n"
}
}
}
build = build.previousBuild
}
echo changes
Ceci est très utile dans les parties stage->when->expression
pour exécuter une étape uniquement lorsque certains fichiers ont été modifiés. Je ne suis pas encore au courant de cette partie. J'aimerais bien créer une bibliothèque partagée à partir de cette page et lui permettre de lui transmettre des modèles globuleux à vérifier.
EDIT: Vérifiez la documentation btw, au cas où vous voudriez aller un peu plus loin. Vous devriez pouvoir convertir tous les appels object.getSomeProperty()
en seulement entry.someProperty
.
Il y a le Changements depuis le dernier plugin de succès qui pourrait vous aider avec ça.
Pour toute personne utilisant Accurev, voici une adaptation de andsens answer. andsens answer ne peut pas être utilisé car le plug-in Accurev n'implémente pas getAffectedFiles. La documentation relative à AccurevTransaction qui étend la classe ChangeLogSet.Entry est disponible à l’adresse ici.
import hudson.plugins.accurev.*
def changes = "Changes: \n"
build = currentBuild
// Go through the previous builds and get changes until the
// last successful build is found.
while (build != null && build.result != 'SUCCESS') {
changes += "Build ${build.id}:\n"
for (changeLog in build.changeSets) {
for (AccurevTransaction entry in changeLog.items) {
changes += "\n Issue: " + entry.getIssueNum()
changes += "\n Change Type: " + entry.getAction()
changes += "\n Change Message: " + entry.getMsg()
changes += "\n Author: " + entry.getAuthor()
changes += "\n Date: " + entry.getDate()
changes += "\n Files: "
for (path in entry.getAffectedPaths()) {
changes += "\n " + path;
}
changes += "\n"
}
}
build = build.previousBuild
}
echo changes
writeFile file: "changeLog.txt", text: changes