J'ai Jenkins configuré pour construire sur des demandes de tirage (PR). Notre référentiel est un référentiel multi-projets et j'ai créé un script pour détecter les modifications apportées au code source et n'exécuter que des tests pertinents pour les projets contenant des modifications (en fonction du chemin du fichier modifié):
def getChangedProjects() {
Set projects = []
def changeLogSets = currentBuild.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]
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
// get the project folder name and
// add it to changed projects set
projects.add(file.path.tokenize('/')[1])
}
}
}
return projects.findAll {it != null}
}
La fonction Groovy fonctionne comme prévu et détecte le dossier qui a été modifié.
Le problème est que la plupart du temps, Jenkins ne présentera aucun changement dans Jenkins:
Mais le PR contenait des modifications de fichiers et je peux voir ces modifications dans Github bien sûr.
Quelqu'un sait pourquoi Jenkins ne montre pas les changements?
Vous pouvez créer un journal des modifications en incluant une étape Git Changelog dans le script de pipeline Jenkins.
Ce plugin fournit un objet de contexte qui contient toutes les informations nécessaires à la création d'un journal des modifications. Il peut également fournir un string qui est un journal des modifications rendu, prêt à être publié.
Ici est une capture d'écran d'un exemple de journal des modifications de Git produit par ce plugin:
Plus d'informations sur ce plugin peuvent être trouvées dans son wiki .
J'espère que ça aide.