Como excluo as construções 11 a 1717 no Jenkins?

42

Devido a uma configuração incorreta, tenho mais de 1700 builds com falha em um trabalho do Jenkins.

Como posso limpá-los com eficiência?

    
por Aaron Digulla 30.04.2013 / 09:48

5 respostas

60

Você tem várias opções:

  • Defina temporariamente o número de construções a serem mantidas na configuração do trabalho ( Descartar construções antigas ) para que essas construções sejam excluídas quando a próxima versão for concluída. Se a próxima construção for 1800, configure-a para manter os 85 mais recentes. Marcar todas as versões mais antigas (ou seja, 1 a 10) como Manter esta compilação para sempre antes de iniciar a próxima compilação. Esta opção não excluirá algumas compilações se você tiver uma tarefa de recebimento de dados que impeça que compilações de upstream sejam excluídas (não será um problema em sua situação se todas falharem).

  • Use o Script Console em Gerenciar Jenkins . Se for um trabalho de nível superior (não em uma pasta), o seguinte fará o seguinte:

    Jenkins.instance.getItemByFullName('JobName').builds.findAll { it.number > 10 && it.number < 1717 }.each { it.delete() }

    Naturalmente, essa abordagem geralmente requer bons backups. Há muita coisa que você pode quebrar usando o console de script.

  • Exclua as pastas das compilações do disco (por padrão, em $JENKINS_HOME/jobs/JobName/builds/ , usando o carimbo de data / hora da inicialização como nome da pasta) e reinicie o Jenkins ou Recarregar configuração do disco . Esta opção não permitirá plugins que, por exemplo, Mantenha o histórico do SVN em ordem, movendo quaisquer alterações para a compilação subsequente para fazer seu trabalho.

por 30.04.2013 / 09:56
16

Como Aaron afirmou corretamente que você também pode usar o Jenkins CLI para este propósito:

java -jar jenkins-cli.jar -s http://yourserver.com delete-builds <JobName> 11-1717
    
por 10.10.2014 / 17:40
12

Basta fazer uma chamada de API:

curl -X POST http://jenkinUser:[email protected]/job/theJob/[11-1717]/doDelete

Para obter o APIToken: faça login no Jenkins > Configuração > Mostrar o token da API.

    
por 24.07.2015 / 17:19
3

Modelo para um script ser executado no Console de scripts do Jenkins. Use o sinalizador reallyDelete para testá-lo antes de excluí-lo:

// Jenkins job
def jobName = 'foo'
// Range of builds to delete
def rs = Fingerprint.RangeSet.fromString("11-1717", false);
// Set to true to actually delete. Use false to test the script.
def reallyDelete = false;

// ----------------------------------
def job = Jenkins.instance.getItemByFullName(jobName);
println("Job: ${job.fullName}");

def builds = Jenkins.instance.getItemByFullName(jobName).getBuilds(rs);
println("Found ${builds.size()} builds");
builds.each{ b-> 
  if (reallyDelete) {
    println("Deleting ${b}");
    b.delete();
  } else {
    println("Found match ${b}");
  }
}
    
por 07.12.2017 / 14:14
0

Eu criei um pequeno script python que serviria a esse propósito. A seguir, o script:

delete_jenkins_builds.py

from os import listdir, path
import shutil


job_build_fullpath = '/var/lib/jenkins/jobs/My-Jenkins-Project/builds'
print listdir(job_build_fullpath)

for build_dir in listdir(job_build_fullpath):
        if build_dir.isdigit() and int(build_dir) in range(11, 1718):
                build_dir_fullpath = path.join(job_build_fullpath, build_dir)
                print "Deleting: " + build_dir_fullpath
                shutil.rmtree(build_dir_fullpath)
  • job_build_fullpath - Caminho do diretório de criação do Job

  • range (start_build_no, end_build_no) - o intervalo (11, 1718) procura todos os builds que vão desde o build no. 11 para construir não. 1717. Por favor, defina de acordo.

  • shutil.rmtree (build_dir_fullpath) - exclui cada diretório de compilação que está no intervalo.

Versão em Python: 2.7

    
por 22.03.2017 / 14:08

Tags