Chiunque ha uno script Jenkins Pipeline in grado di riempire tutte le modifiche rispetto alla precedente build di successo in una variabile? Sto usando git e un lavoro pipeline multibranch.Come ottenere le modifiche dall'ultima build di successo nella pipeline di jenkins?
risposta
Beh, sono riuscito a mettere insieme qualcosa. Sono abbastanza sicuro che è possibile scorrere gli array meglio, ma ecco quello che ho per ora:
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;
}
C'è lo Changes Since Last Success Plugin che potrebbe aiutarti in questo.
Sulla base della risposta da CaptRespect mi si avvicinò con il seguente script per l'utilizzo in cantiere dichiarativa:
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
Questo è abbastanza utile nelle parti stage->when->expression
per eseguire uno stage solo quando alcuni file sono stati modificati. Non ho ancora ottenuto quella parte, però, mi piacerebbe creare una libreria condivisa da questo e rendere possibile il passaggio di alcuni modelli globbing da verificare.
MODIFICA: Check the docs btw, nel caso in cui si desideri approfondire un po '. Dovresti essere in grado di convertire tutte le chiamate object.getSomeProperty()
in solo entry.someProperty
.
Nice. C'è un repository github con alcuni esempi di pipeline se ti interessa eseguire il control: https://github.com/jenkinsci/pipeline-examples – CaptRespect
Questo non è lo stile della pipeline dichiarativa ma la pipeline! – Lincoln
@Lincoln, sì. Non puoi farlo in modo dichiarativo. Quello che devi fare è racchiuderlo in un blocco di script o usarlo da una libreria condivisa. – andsens
- 1. Jenkins Build Trigger pianificato per la pipeline
- 2. Plugin di Jenkins Delivery Pipeline e build parametrizzati
- 3. Posso ottenere lo stato di un precedente stage nella pipeline Jenkins?
- 4. Checkout SVN con credenziali nella pipeline Jenkins?
- 5. Jenkins ottenere l'elenco di build e parametri
- 6. Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
- 7. Jenkins Pipeline Wipe Out Works
- 8. Come ottenere l'URL del lavoro della pipeline in jenkins
- 9. Plugin della pipeline Jenkins: imposta la descrizione della build
- 10. Imposta il numero di build per il workflow Jenkins (pipeline) build
- 11. aggiungi parametro di costruzione nella pianificazione build di jenkins
- 12. Come si ottiene l'URL SCM all'interno di una pipeline Jenkins o pipeline Multibranch?
- 13. Ottenere build SubProject tramite l'API Jenkins
- 14. Come eseguire una build Jenkins solo se un'altra build ha avuto successo?
- 15. Come personalizzare il nome di build Jenkins?
- 16. Creazione di una revisione particolare in Jenkins Pipeline
- 17. Sviluppo del plugin post-build di Jenkins
- 18. Jenkins costruire Pipeline - Restart Alla fase
- 19. Jenkins Costruire flusso contro Workflow (Pipeline) plug
- 20. Come sopprimere le righe dello script di origine echo nell'output della console pipeline di jenkins?
- 21. Lavoro parametrizzato usando il plug-in per la pipeline di build su Jenkins
- 22. Errore di Jenkins Build java.lang.ClassNotFoundException: hudson.remoting.Launcher
- 23. Copia artefatto di build tra i nodi usando la pipeline Jenkins
- 24. Come aggiungere un passaggio di timeout a Jenkins Pipeline
- 25. Come posso avviare una shell di login bash nella pipeline di jenkins (precedentemente nota come flusso di lavoro)?
- 26. Come ottenere il timestamp del build dalle variabili di costruzione di Jenkins?
- 27. Come organizzare la pipeline completa di build con Gulp, Maven e Jenkins, fino ai test di integrazione?
- 28. Come utilizzare un valore FileParameterValue in una pipeline jenkins 2
- 29. Come si rimuove un lavoro in pipeline inarrestabile in Jenkins?
- 30. Come manipolare il risultato di costruzione di un lavoro di pipeline di Jenkins?
Ma non funziona con [tag: jenkins-pipeline], immagino .. – StephenKing
Sì, l'ho verificato ma non riuscivo a capire come accedervi dal file Jenkins – CaptRespect