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


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


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.


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()

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


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.


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() }} 

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.


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()
}

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.


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()

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)
    }
  }
}


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


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)

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.