Comment effacer mon historique de build Jenkins / Hudson?

87

J'ai récemment mis à jour la configuration de l'un de mes builds hudson. L'historique de compilation n'est pas synchronisé. Existe-t-il un moyen d'effacer mon historique de build?

S'il te plaît et merci

myusuf3
la source
Pouvez-vous élaborer sur "totalement foiré"? Peut-être que quelqu'un aura déjà rencontré un problème similaire et pourra vous expliquer comment le résoudre.
Rob Hruska
désolé pour l'ambiguïté. fixé.
myusuf3
Il y a une question plus récente et un peu plus spécifique ici: stackoverflow.com/questions/13052390/…
Erwan Legrand
Ce message peut aider codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Voici la meilleure réponse que j'ai trouvée: superuser.com/questions/1418885/…
Asma Zubair

Réponses:

51

Si vous cliquez sur Gérer Hudson / Recharger la configuration à partir du disque, Hudson rechargera toutes les données de l'historique de construction.

Si les données sur le disque sont faussées, vous devrez aller dans votre répertoire% HUDSON_HOME% \ jobs \ < projectname > et restaurer les répertoires de construction comme ils sont censés l'être. Rechargez ensuite les données de configuration.

Si vous demandez simplement comment supprimer tout l'historique des builds, vous pouvez simplement supprimer les builds une par une via l'interface utilisateur s'il n'y en a que quelques-uns, ou aller dans le répertoire% HUDSON_HOME% \ jobs \ < projectname > et supprimer tous les sous-répertoires là - ils correspondent aux builds. Ensuite, redémarrez le service pour que les modifications prennent effet.

William Leara
la source
J'ai supprimé tous les fichiers et dossiers à l'intérieur de "/ var / lib / jenkins / jobs / Demo" mais lorsque je vais à l'interface utilisateur Jenkins dans ce JOB, je vois toujours l'historique des builds.
paul
1
Après avoir "singé" avec la structure de répertoires, allez simplement dans "Gérer Jenkins" et sélectionnez "Recharger la configuration à partir du disque"
DanBaker
1
@paul, après avoir supprimé les dossiers, un redémarrage de Jenkins est nécessaire pour voir l'historique de construction disparu de l'interface utilisateur. BTW, si nous utilisons Jenkins, le chemin est généralement situé dans / var / jenkins_home / jobs / {nom du projet} / builds /
Bright
Je pense que cette solution nécessite beaucoup d'étapes du côté du système, une solution beaucoup plus propre est fournie dans la réponse de @Nayana Adassuriya
lfn
109

Utilisez la console de script (Manage Jenkins> Script Console) et quelque chose comme ce script pour supprimer en bloc l'historique de construction d'une tâche https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Ce script suppose que vous souhaitez supprimer uniquement une plage de builds. Pour supprimer toutes les versions d'un travail donné, utilisez ceci (testé):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()
rjohnston
la source
5
Génial!! certainement la meilleure approche! :)
hek2mgl
super astuce, mais que diriez-vous de réinitialiser le compteur de build? un script pour cela?
Jes Chergui
1
@JesChergui J'ai mis à jour pour afficher la réinitialisation du numéro de build. La console de script vous permet de contrôler toutes sortes de choses, voir javadoc.jenkins-ci.org (AbstractProject est un bon point de départ pour jouer avec les jobs)
rjohnston
My Jenkins s'est plaint qu'il n'était pas autorisé à accéder aux instances, ou autres. Je l'exécutais à partir d'un nouveau pipeline que j'avais configuré spécifiquement pour cette suppression et j'ai collé le code ci-dessus et changé le nom.
Will
@Est-ce que cela est dû au plugin de sécurité de script qui place les travaux de pipeline dans un bac à sable super restrictif. Vérifiez si vous avez une signature à approuver sous "Gérer Jenkins"> "Approbations de scripts en cours de processus". Une autre option serait d'utiliser la capacité du plugin Scriptler à exécuter des scripts d'administration dans un travail: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston
76

Cette réponse est pour Jenkins

  1. Accédez à votre page d'accueil Jenkins → Gérer JenkinsConsole de script

    Entrez la description de l'image ici

  2. Exécutez le script suivant ici. Changer copy_folderpouryour project name

Code:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Mon message

Nayana Adassuriya
la source
4
Meilleure réponse jusqu'à présent
Dmitry Zaytsev
1
C'est la solution la plus rapide.
davegallant
Ouais, mais pour celui-ci, NE redémarrez PAS Jenkins ou il ne semble pas mettre à jour le numéro de construction suivant à 1 lorsque vous effectuez une compilation après le redémarrage. Le mien a commencé à 39 ans, j'ai donc dû refaire ça.
Will
Travailler à partir de Jenkins 2.75
ѺȐeallү
22

Voici une autre option: supprimez les builds avec cURL.

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Ce qui précède supprime les builds 1 à 56 pour le travail myJob.

Si l'authentification est activée sur l'instance Jenkins, un nom d'utilisateur et un jeton d'API doivent être fournis comme ceci:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Le jeton API doit être récupéré à partir de la /me/configurepage dans Jenkins. Cliquez simplement sur le bouton "Afficher le jeton API ..." pour afficher à la fois le nom d'utilisateur et le jeton API.

Edit: il faudra peut-être remplacer doDeleteAllpar doDeletedans les URL ci-dessus pour que cela fonctionne, selon la configuration ou la version de Jenkins utilisée.

Erwan Legrand
la source
10

Voici comment supprimer TOUS LES BUILDS POUR TOUS LES EMPLOIS ...... en utilisant le script Jenkins.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
ort11
la source
9

Vous pouvez modifier temporairement la configuration du projet pour ne sauvegarder que la dernière version, recharger la configuration (qui devrait supprimer les anciennes versions), puis modifier à nouveau le paramètre de configuration à la valeur souhaitée.

the_mandrill
la source
Désolé, je n'ai pas utilisé Hudson maintenant depuis quelques années, mais voyez ceci à propos du rechargement de la configuration: stackoverflow.com/questions/5216552/…
the_mandrill
En tant que personne n'ayant pas les autorisations d'administrateur sur Jenkins, c'était la seule option qui fonctionnait pour moi.
DrStrangepork
4

Si vous souhaitez effacer l'historique de construction de MultiBranchProject (par exemple le pipeline), accédez à votre page d'accueil Jenkins → Gérer Jenkins → Console de script et exécutez le script suivant:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}
Marin Ivanov
la source
4

Celui-ci est la meilleure option disponible.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

Ce code supprimera tout l'historique de construction de Jenkins Job.

Rahul khanvani
la source
2
Pour tous ceux qui se demandent comment exécuter le code ci-dessus, accédez à Jenkins Home> Manage Jenkins> Script Console. Il y aura un champ de texte dans lequel vous pouvez entrer ce script.
Pharaoh Tools
2

Utilisation de Script Console.

Dans le cas où les travaux sont regroupés, il est possible de lui donner un nom complet avec des barres obliques:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

ou parcourez la hiérarchie comme ceci:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
ATrubka
la source
2

La suppression directe du système de fichiers n'est pas sûre. Vous pouvez exécuter le script ci-dessous pour supprimer toutes les versions de tous les travaux (de manière récursive).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}
Aytunc Beken
la source
1

Accédez au répertoire de %HUDSON_HOME%\jobs\<projectname>suppression buildset supprimez les lastStable, lastSuccessfulliens, puis supprimeznextBuildNumber le fichier.

Après avoir effectué les étapes ci-dessus, accédez au lien ci-dessous à partir de l'interface utilisateur
Jenkins-> Gérer Jenkins -> Recharger la configuration à partir du disque

Il fera ce dont vous avez besoin

Manish Agrawal
la source
1

Si vous utilisez la méthode Script Console, essayez d'utiliser ce qui suit à la place pour prendre en compte si les travaux sont regroupés dans des conteneurs de dossiers.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

ou

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
RampantBadger
la source
0

Aller vers: %JENKINS_HOME%\jobs\jobName

Ouvrez le fichier "nextBuildNumber" et modifiez le numéro. Après cela, rechargez la configuration Jenkins. Remarque: le fichier "nextBuildNumber" contient le prochain numéro de build qui sera utilisé par Jenkins.

Nitish
la source