Como faço para limpar meu histórico de construção do Jenkins / Hudson?

87

Recentemente, atualizei a configuração de uma das minhas compilações hudson. O histórico de construção está fora de sincronia. Existe uma maneira de limpar meu histórico de construção?

Por favor e obrigado

myusuf3
fonte
Você pode explicar "totalmente confuso"? Talvez alguém já tenha passado por um problema semelhante e possa orientá-lo sobre como corrigi-lo.
Rob Hruska
desculpe pela ambigüidade. fixo.
myusuf3
Há uma pergunta mais recente e um pouco mais específica aqui: stackoverflow.com/questions/13052390/…
Erwan Legrand,
Esta postagem pode ajudar codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Aqui está a melhor resposta que encontrei: superuser.com/questions/1418885/…
Asma Zubair

Respostas:

51

Se você clicar em Gerenciar Hudson / Recarregar configuração do disco, o Hudson recarregará todos os dados do histórico de construção.

Se os dados no disco estiverem confusos, você precisará ir para o diretório% HUDSON_HOME% \ jobs \ < projectname > e restaurar os diretórios de construção como deveriam estar. Em seguida, recarregue os dados de configuração.

Se você está simplesmente perguntando como remover todo o histórico de construção, você pode simplesmente excluir as compilações uma a uma por meio da IU, se houver apenas algumas, ou ir para o diretório% HUDSON_HOME% \ jobs \ < projectname > e excluir todas as subdiretórios lá - eles correspondem às compilações. Em seguida, reinicie o serviço para que as alterações tenham efeito.

William Leara
fonte
Excluí todos os arquivos e pastas dentro de "/ var / lib / jenkins / jobs / Demo", mas quando vou para a IU do Jenkins dentro deste JOB, ainda vejo o histórico de compilações.
paul
1
Depois de "mexer" com a estrutura do diretório, vá em "Gerenciar Jenkins" e selecione "Recarregar configuração do disco"
DanBaker
1
@paul, após excluir as pastas lá, é necessário reiniciar o Jenkins para ver o histórico de construção desaparecido da IU. BTW, se estivermos usando Jenkins, o caminho normalmente está localizado em / var / jenkins_home / jobs / {project name} / builds /
Bright
Acho que essa solução requer muitas etapas do lado do sistema, uma solução muito mais limpa é fornecida na resposta de @Nayana Adassuriya
lfn
107

Use o console de script (Gerenciar Jenkins> Console de Script) e algo parecido com este script para excluir em massa o histórico de criação de um trabalho https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Esse script assume que você deseja excluir apenas uma série de compilações. Para excluir todas as compilações para um determinado trabalho, use isto (testado):

// 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() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()
Rjohnston
fonte
5
Ótimo!! definitivamente a melhor abordagem! :)
hek2mgl
ótimo truque, mas que tal redefinir o contador de compilação? algum script para isso?
Jes Chergui
1
@JesChergui Eu atualizei para mostrar a redefinição do número da compilação. O console de script permite que você controle todos os tipos de coisas, consulte javadoc.jenkins-ci.org (AbstractProject é um bom lugar para começar a brincar com tarefas)
rjohnston
Meu Jenkins reclamou que não tinha permissão para acessar instâncias, ou algo parecido. Eu o estava executando a partir de um novo pipeline que havia configurado especificamente para essa exclusão, colei o código acima e alterei o nome.
Será de
@Will isso é devido ao plugin de segurança de script que coloca os trabalhos do pipeline em uma sandbox super restritiva. Veja se você tem uma assinatura para aprovar em "Gerenciar Jenkins"> "Aprovações de script em processo". Outra opção seria usar a capacidade do plug-in Scriptler para executar scripts de administração em um trabalho: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston
75

Esta resposta é para Jenkins

  1. Vá para a página inicial do Jenkins → Gerenciar JenkinsConsole de script

    Insira a descrição da imagem aqui

  2. Execute o seguinte script lá. Mudar copy_folderparayour project name

Código:

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

Minha publicação

Nayana Adassuriya
fonte
4
Melhor resposta até agora
Dmitry Zaytsev
1
Esta é a solução mais rápida.
Davegallant
Sim, mas para este, NÃO reinicie o Jenkins ou ele não parece atualizar o nextbuildnumber para 1 quando você faz uma compilação após reiniciar. O meu começou aos 39 anos, então tive que refazer isso.
Será de
Trabalhando a partir de Jenkins 2.75
ѺȐeallү
22

Aqui está outra opção: exclua as compilações com cURL.

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

O item acima exclui as versões 1 a 56 do job myJob.

Se a autenticação estiver ativada na instância Jenkins, um nome de usuário e um token de API devem ser fornecidos assim:

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

O token da API deve ser buscado na /me/configurepágina no Jenkins. Basta clicar no botão "Mostrar token de API ..." para exibir o nome de usuário e o token de API.

Editar: pode ser necessário substituir doDeleteAllpor doDeletenas URLs acima para fazer isso funcionar, dependendo da configuração ou versão do Jenkins usada.

Erwan Legrand
fonte
10

Aqui está como deletar TODAS AS CONSTRUÇÕES PARA TODOS OS TRABALHOS ...... usando o Jenkins Scripting.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
ort11
fonte
9

Você pode modificar a configuração do projeto temporariamente para salvar apenas a última 1 compilação, recarregar a configuração (o que deve destruir as compilações antigas) e, em seguida, alterar a definição de configuração novamente para o valor desejado.

the_mandrill
fonte
Não uso o Hudson há alguns anos, mas veja isto sobre como recarregar a configuração: stackoverflow.com/questions/5216552/…
the_mandrill
Como alguém que não tem permissões de administrador para o Jenkins, essa foi a única opção que funcionou para mim.
DrStrangepork
4

Esta é a melhor opção disponível.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

Este código excluirá todo o histórico de construção do Jenkins Job.

Rahul Khanvani
fonte
1
Para qualquer um que esteja se perguntando como executar o código acima, vá para Jenkins Home> Manage Jenkins> Script Console. Haverá um campo de texto onde você pode inserir este script.
Pharaoh Tools
3

Se você quiser limpar o histórico de construção do MultiBranchProject (por exemplo, pipeline), vá para a página inicial do Jenkins → Gerenciar Jenkins → Console de script e execute o seguinte script:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}
Marin Ivanov
fonte
2

Usando o console de script.

No caso de as tarefas serem agrupadas, é possível dar a elas um nome completo com barras:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

ou atravesse a hierarquia assim:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
ATrubka
fonte
1

Vá para a %HUDSON_HOME%\jobs\<projectname>remoção buildsdir e remover lastStable, lastSuccessfullinks, e remover nextBuildNumberarquivos.

Depois de seguir as etapas acima, vá para o link abaixo de UI
Jenkins-> Gerenciar Jenkins -> Recarregar configuração do disco

Fará o que você precisa

Manish Agrawal
fonte
1

Se estiver usando o método Script Console, tente usar o seguinte em vez de levar em consideração se os trabalhos estão sendo agrupados em contêineres de pasta.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

ou

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
RampantBadger
fonte
1

Excluir diretamente do sistema de arquivos não é seguro. Você pode executar o script abaixo para excluir todas as compilações de todos os trabalhos (recursivamente).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}
Aytunc Beken
fonte
0

Navegar para: %JENKINS_HOME%\jobs\jobName

Abra o arquivo "nextBuildNumber" e altere o número. Depois disso, recarregue a configuração do Jenkins. Observação: o arquivo "nextBuildNumber" contém o próximo número de compilação que será usado pelo Jenkins.

Nitish
fonte