Jenkins: oude builds verwijderen met opdrachtregel

Ik verwijder oude jenkins-builds met rmwaar job wordt gehost:

my_job/builds/$ rm -rf [1-9]*

Deze oude builds zijn nog steeds zichtbaar op de vacaturepagina.
Hoe verwijder je ze met de opdrachtregel?
(zonder de verwijderknop in elke build-gebruikersinterface)


Antwoord 1, autoriteit 100%

Hier is een andere optie: verwijder de builds op afstand met cURL. (Vervang het begin van de URL’s door wat u ook gebruikt om toegang te krijgen tot Jenkins met uw browser.)

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

Bovenstaande verwijdert build #1 tot #56 voor job myJob.

Als authenticatie is ingeschakeld op de Jenkins-instantie, moeten een gebruikersnaam en API-token als volgt worden opgegeven:

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

Het API-token moet worden opgehaald van de /me/configure-pagina in Jenkins. Klik gewoon op de knop “API-token weergeven…” om zowel de gebruikersnaam als de API-token weer te geven.

Bewerken: zoals opgemerkt door yegeniy in een opmerking hieronder, kan het zijn dat je doDeleteAllmoet vervangen door doDeletein de bovenstaande URL’s om dit te laten werken, afhankelijk van de configuratie .


Antwoord 2, autoriteit 78%

Het lijkt erop dat dit is toegevoegd aan de CLI, of dat er in ieder geval aan wordt gewerkt: http://jenkins.361315.n4.nabble.com/How-to-purge-old-builds-td385290.html

Syntaxis zou ongeveer als volgt zijn: java -jar jenkins-cli.jar -s http://my.jenkins.host delete-builds myproject '1-7499' --username $user --password $password


Antwoord 3, autoriteit 44%

  1. Controleer uw home jenkins-directory:
    • “Jenkins beheren” ==> “Systeem configureren”
    • Vink het veld “Home directory” aan (meestal is dit /var/lib/jenkins)

Opdracht voor het verwijderen van alle jenkins-taakbuilds

/jenkins_home/jobs> rm -rf */builds/*
  1. Na het verwijderen moet de configuratie opnieuw worden geladen:

    • “Jenkins beheren” ==> “Configuratie opnieuw laden vanaf schijf”


Antwoord 4, autoriteit 24%

U kunt het doen door Groovy Scripts met behulp van Hudson API.. Toegang tot uw jenkins-installatie

http://localhost:38080/script.

Bijvoorbeeld voor het verwijderen van alle oude builds van alle projecten met behulp van het volgende script:
Opmerking: pas op als u vingerafdrukken gebruikt, u verliest alle geschiedenis.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    System.out.println("Deleting all builds of job "+item.name)
    for(build in item.getBuilds()){
      build.delete()
    }  
  }
  else {
    System.out.println("Skipping job "+item.name+", currently building")
  }
}

Of voor het opruimen van alle werkruimten:

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

Er zijn veel voorbeelden op de Jenkins-wiki


Antwoord 5, autoriteit 16%

Is er een reden waarom u dit handmatig moet doen in plaats van Jenkins oude builds voor u te laten verwijderen?

U kunt uw taakconfiguratie wijzigen om oude builds automatisch te verwijderen, op basis van het aantal dagen of het aantal builds. U hoeft zich er geen zorgen meer over te maken of alles bij te houden, Jenkins doet het gewoon voor u.


Antwoord 6, autoriteit 2%

Het volgende script ruimt oude builds van jobs op. U moet de configuratie opnieuw laden van schijf als u build handmatig verwijdert:

import hudson.model.*
for(item in Hudson.instance.items) {
    if (!item.isBuilding()) {
        println("Deleting old builds of job " + item.name)
        for (build in item.getBuilds()) {
            //delete all except the last
            if (build.getNumber() < item.getLastBuild().getNumber()) {
                println "delete " + build
                try {
                    build.delete()
                } catch (Exception e) {
                    println e
                }
            }
        }
    } else {
        println("Skipping job " + item.name + ", currently building")
    }
}

Antwoord 7

Voer vanaf de Jenkins Scriptler-console het volgende Groovy-script uit om alle builds van taken te verwijderen die onder een weergave worden vermeld:

import jenkins.model.Jenkins
hudson.model.Hudson.instance.getView('<ViewName>').items.each() {
    println it.fullDisplayName
    def jobname = it.fullDisplayName
    def item = hudson.model.Hudson.instance.getItem(jobname)
    def build = item.getLastBuild()
    if (item.getLastBuild() != null) {
        Jenkins.instance.getItemByFullName(jobname).builds.findAll {
            it.number <= build.getNumber()
        }.each {
            it.delete()
        }
    }
}

Antwoord 8

Vanuit Script Console Voer dit uit, maar u moet de taaknaam wijzigen:

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

Antwoord 9

def jobName = "MY_JOB_NAME"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().findAll { it.number < 10 }.each { it.delete() }

Als je 12 builds had, zou dit builds 0-9 wissen en zou je nog 12,11,10 over hebben. Zet het gewoon in de scriptconsole


Antwoord 10

Dit script configureert de instellingen voor het bewaren van de build van alle Jenkins-taken.

Verander de waarden van 30 en 200 in de suite die je nodig hebt, voer het script uit en start de Jenkins-service opnieuw.

#!/bin/bash
cd $HOME
for xml in $(find jobs -name config.xml)
do
    sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
    sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
done

Other episodes