13 November 2019 ~ 0 Comments

Brisanje starih Jenkins build jobova

Jenkins po defaultu ne ograničava broj buildova koje čuva. Ako se prilikom kreiranja novog build joba ne definira koliko posljednjih buildova (vremenski ili brojem) će se čuvati postoji mogućnost da će se popuniti diskovni prostor na kojem Jenkins pohranjuje buildove. Rješavanje starih builodva moguće je na nekoliko načina:

  • rekonfiguracijom build joba i ponovni pokretanjem joba što će pokrenuti i brisanje starih jobova
  • ručnim brisanjem svakog pojedinog joba
  • ručnim brisanjem jobova sa diska (pa pokretanje Reload Configuration from Disk)
  • Groovy skriptom iz Jenkins konzole

Prve tri metode imaju svoje nedostatke. Rekonfiguracija zahtijeva da se svaki build job pokrene (što često nije moguće). Ručno brisanje ne preporučam jer nije moguće znati koji job je označen za trajno čuvanje, a i moguće je da ne postoji opcija direktnog pristupa do fizičkog diska. Ručno brisanje je… ručno brisanje a to nikada nije opcija :)

Dakle ostaje jedino Groovy skripta :)

import jenkins.model.Jenkins
import hudson.model.Job

// how much history do you need?
MAX_BUILDS = 5

for (job in Jenkins.instance.items) {
    def recent = job.builds.limit(MAX_BUILDS)
    for (build in job.builds) {
        if (!recent.contains(build)) {
            if (build.keepLog || build.building) {
      	        // if build is marked to keep or is currently building do not delete
                println "Keep build: " + build
            }
            else {
                // delete build
      	        println "Deleting build: " + build
                build.delete()
            }
        }
    }
}

Skripta će obrisati buildove osim zadnjih 5 (konfigurabilno sa varijablom MAX_BUILDS). Dodatno, neće obrisati buildove koji su oznaćeni da se čuvaju trajno (build.keepLog) te buildove koji se trenutno izvršavaju (build.building).

Svi prijedlozi poboljšavanja su dobrodošli :)

Skriptu je moguće preuzeti i na GitHubu.

Tags: ,

Leave a Reply