Comment réinitialiser le numéro de build dans jenkins?

90

J'utilise Jenkins et Gradle pour construire mon projet java.

Chaque fois que je construis mon projet, j'obtiens un nouveau numéro de build sur l'écran Jenkins.

Voici mes informations de compilation Jenkins:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

Je veux réinitialiser le numéro de build Jenkins comme:

Success > Console Output  #1    03-Jan-2014 12:02:45

Comment puis-je réinitialiser le numéro de build dans Jenkins?

Sivakumar M
la source

Réponses:

161

Peut être plus facile à faire à partir de la console de script groovy. Accédez à http: // your-jenkins-server / script Dans la fenêtre de script, entrez:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)
antweiss
la source
6
ou via clijava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev
3
C'est certainement la meilleure réponse. Vous n'avez même pas besoin de la boucle de suppression si vous souhaitez uniquement définir le nombre.
Nick
Pour une raison quelconque, cela n'effectue la suppression que sur la dernière version, mais ce qui suit a fonctionné pour moi: echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
BRNTZN
Une question noob .. comment je connais le nom exact du poste.
Ammar Mujeeb
@AmmarMujeeb accédez à votre tableau de bord Jenkins et vous y verrez le nom du travail. Vous pouvez également aller /var/lib/jenkins/jobs/sur Linux et le nom du répertoire il y a le nom exact du travail
rickrizzo
62

D' ici

Étant donné que votre travail Hudson s'appelle FooBar,

  • renommer FooBar en FooBar-Copy
  • créer un nouveau travail nommé FooBar, en utilisant l'option 'Copier le travail existant', à partir de FooBar-Copy
  • supprimer FooBar-Copy
MokaT
la source
35
  • Commencez par effacer l'espace de travail et supprimez les versions précédentes.
    • Sur le serveur, accédez au répertoire du travail, par exemple. 'var / lib / jenkins / jobs / myJob' supprime l'espace de travail et les répertoires de construction ainsi que tous les fichiers d'interrogation, les fichiers lastSuccessful, lastStable, etc. Vous ne devriez avoir que config.xml et lastBuildNumber.
    • Arrêtez jenkins en utilisant quelque chose comme le service jenkins stop
    • Modifiez le fichier appelé nextBuildNumber , en insérant 1 au lieu du numéro de build actuel
    • Redémarrez Jenkins, le service Jenkins démarre
    • Connectez-vous à Jenkins, accédez à votre travail et appuyez sur Build. Devrait commencer à construire l'emploi n ° 1
Jasonoriordan
la source
1
Cela a été très utile. Merci.
23

Si vous voulez définir le prochain numéro de build, il existe le plugin "NextBuildNumber" pour cela. Mais cela ne fonctionnera pas dans votre cas car le numéro de build dont vous avez besoin, qui est 1, est inférieur à votre numéro de build actuel.

Ici, il faut d'abord effacer toutes les versions précédentes. Vous pouvez le faire en exécutant ce script simple Allez dans -> Gérer Jenkins -> Console de script

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

Vous pouvez maintenant définir le numéro de build suivant sur 1 et exécuter la build. Il commencera par 1 . :) C'est si simple.

Mise à jour - Jenkins a maintenant un plugin Purge Job History pour le faire de la manière la plus simple. Consultez la page pour plus de détails - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin

Amol Manthalkar
la source
6

Pour réinitialiser plus généralement votre numéro de build à N(où Nn'est pas nécessairement 1):

  • Supprimez toutes les versions existantes où buildNumber >= N.
  • Modifier Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. Définissez le numéro qu'il contient N.
  • Dans Jenkins, sélectionnez Manage Jenkins -> Reload Configuration from Disk.
c32hedge
la source
Assurez-vous de lire ce défaut avant de sélectionner "Recharger la configuration à partir du disque" - issues.jenkins-ci.org/browse/JENKINS-32984
user3181500
6

En développant la réponse acceptée, voici comment le faire pour tous les projets à la fois:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  
zb226
la source
4

En prolongement de l'excellente réponse de @ antweiss, nous pouvons en fait aller plus loin ...

Il n'est pas nécessaire de supprimer l'historique de construction complet, si vous ne le souhaitez pas, vous pouvez simplement revenir en arrière, à un point antérieur:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

Si vous voulez une course factice, pour vérifier ce qu'il va faire, sans le faire réellement, il suffit de mettre les build.delete()et item.updateNextBuildNumber(resetNumberTarget)lignes et décommentez les différentes commandes d'impression.


Documentation: les détails de ces objets étaient difficiles à trouver, mais j'ai identifié les éléments suivants:

Brondahl
la source
1

Vous pouvez utiliser un nexBuildNumberplug-in ou simplement modifier le nexBuildNumberfichier pour réinitialiser le numéro de version. Voici les étapes à suivre:

  • Allez dans .jenkins/Jobs/<YourJobName>/build/, sauvegardez ce dossier (si vous en avez besoin pour une utilisation future) et supprimez le dossier de construction .

Remarque: une fois que vous avez nettoyé les anciennes versions, vous perdez les historiques de compilation et ils ne sont plus disponibles sur le tableau de bord Jenkins.

  • Rechargez la configuration (Jenkins -> Gérer Jenkins).
  • Définissez la version de construction suivante sur 1 en utilisant le plug-in Next Build Number ou en modifiant le nextBuildNumberfichier dans votre répertoire de tâches.
Anni S
la source
0

J'ai trouvé un moyen simple de le faire.

  1. Effacez votre espace de travail.
  2. Accédez à chaque build qui a été enregistré sur Jenkins et supprimez-le.
  3. Définissez le numéro de build sur 1 puis build.

Jenkins utilise la build précédente pour déterminer le numéro de build suivant, si le numéro de build que vous entrez est inférieur au numéro de build précédent, Jenkins augmentera automatiquement votre numéro de build à un niveau supérieur à celui de la build précédente. Alors ici nous venons

Mai Quân Nguyễn
la source
-1

Pour réinitialiser les numéros de build de tous les travaux:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
GRK
la source