Ik verwijder oude jenkins-builds met rm
waar 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 doDeleteAll
moet vervangen door doDelete
in 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%
- Controleer uw home jenkins-directory:
Opdracht voor het verwijderen van alle jenkins-taakbuilds
/jenkins_home/jobs> rm -rf */builds/*
-
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