Existe alguma maneira de limpar o espaço de trabalho do Jenkins?

100

Como posso limpar o espaço de trabalho no Jenkins? Estou usando AccuRevcomo ferramenta de controle de versão.

Criei freestyleprojetos no Jenkins.

Karthik
fonte

Respostas:

91

Existe uma maneira de limpar o espaço de trabalho no Jenkins. Você pode limpar o espaço de trabalho antes ou depois da construção.

Primeiro, instale o plug-in de limpeza do espaço de trabalho .

Para limpar o espaço de trabalho antes da construção: Em Ambiente de construção, marque a caixa que diz Excluir espaço de trabalho antes do início da construção.

Para limpar a área de trabalho após a compilação: Sob o título Ações pós-compilação seleccionar espaço de trabalho Excluir quando construção é feito a partir do adicionar ações pós-compilação no menu suspenso.

Nagendra Singh
fonte
Muito obrigado Nagendra. Consigo corrigir esse problema usando o plug-in de limpeza do espaço de trabalho.
Karthik
o que acontecerá se eu não limpar o espaço de trabalho? é buscar as alterações do url remoto ou apenas construir sobre a mesma coisa repetidamente?
alphaguy
@alphaguy Jenkins cria um novo espaço de trabalho para cada construção que você executa, portanto, se você não excluir os espaços de trabalho, eventualmente seu nó ficará sem espaço.
Miles Winther de
Podemos reutilizar o espaço de trabalho ... atualmente, quando empurro o código, ele clona do servidor git e inicio a compilação. Isso leva um longo processo adicionando extras ao processo de construção! podemos escolher o commit mais recente? @MilesWinther
alphaguy
@alphaguy Você pode usar um repo de referência, veja a resposta aqui: stackoverflow.com/a/9932036/6221831
Miles Winther
53

Se você quiser limpá-lo manualmente, para mim com minha versão do jenkins (não parecia precisar de um plugin extra instalado, mas quem sabe), há um link "espaço de trabalho" na coluna à esquerda, clique no seu projeto, em "área de trabalho", um link "Limpar área de trabalho atual" aparece abaixo dele na coluna do lado esquerdo. captura de tela

rogerdpack
fonte
4
Não vejo isso, infelizmente. Tem certeza que não é um plugin?
Joachim Breitner
2
Hmm, parece que o "Plug-in de limpeza do espaço de trabalho" é de fato um dos plug-ins que é instalado "por padrão". No entanto, depois de removê-lo, ainda tenho esse link e parece ainda funcionar. Então ... não tenho certeza de onde vem. V2.121.3
rogerdpack
2
Isso funcionou, mas eu tive que clicar no link do espaço de trabalho duas vezes: o primeiro para ir para a página "espaço de trabalho", a segunda vez para realmente mostrar o link "Apagar o espaço de trabalho atual". Acho que é uma informação que você pode incluir na resposta.
Gnafu
Que versão do Jenkins é essa? Porque o meu não mostra essa opção (provavelmente o meu é muito antigo).
Pedro Trujillo
V2.121.3 não tem certeza em outras versões
rogerdpack
31

Ao lado das soluções acima, existe uma maneira mais "COMUM" - exclua diretamente o maior consumidor de espaço da máquina Linux. Você pode seguir as etapas abaixo:

  1. Faça login na máquina Jenkins (Putty) insira a descrição da imagem aqui
  2. cd para o caminho de instalação do Jenkins

Usando ls -lart para listar a pasta oculta também, normalmente a instalação do jenkin é colocada em .jenkins / pasta

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. liste os espaços das pastas

Use df -h para mostrar o espaço em disco em alto nível

du -sh ./*/ para listar a memória total para cada subpasta no caminho atual.

du -a /etc/ | sort -n -r | head -n 10 irá listar os 10 principais diretórios que ocupam espaço em disco em / etc /

  1. Exclua construção antiga ou outra pasta de tamanho grande

Normalmente ./job/ pasta ou ./workspace/ pasta pode ser a maior pasta. Por favor, entre e exclua com base no que você precisa (NÃO exclua a pasta inteira).

rm -rf theFolderToDelete

insira a descrição da imagem aqui

Kevin li
fonte
3
Não sei por que votou contra. Esta parece uma boa opção para administradores do Jenkins. Concorde não para usuários "somente leitura".
Saikat de
1. Isso realmente não responde à pergunta feita e 2. meu servidor Jenkins está sendo executado no Windows.
mjaggard
10
@mjaggard A pergunta foi feita por outra pessoa e ele não mencionou se é apenas para Windows. Ele também perguntou como limpar o espaço de trabalho (não se limitando ao frontend / cliente). Estou perdendo algo óbvio aqui?
Saikat
4
Eu concordo totalmente com @takias, parece uma resposta válida para a pergunta. E um bom, se você tiver permissão suficiente para fazê-lo.
PhoneixS de
1
Esta é uma resposta para "como faço para recuperar espaço em uma máquina GNU / Linux" não específico de jenkins.
Felipe Alvarez
20

Plug-in de limpeza do espaço de trabalho

No arquivo Jenkins, adicione

cleanWs()

Isso excluirá o espaço de trabalho após a conclusão da construção

Waranlogesh
fonte
3
Eu realmente aprecio essa resposta porque eu tinha o plugin instalado a partir das outras respostas, mas foi isso que o fez funcionar na minha configuração. Somando-se a isso, segui os links para o mesmo plugin nas outras respostas, mas cleanWs()não estava presente na página de destino do plugin como sintaxe para adicionar ao meu Jenkinsfile.
Arthur Weborg
19

IMPORTANTE: É seguro remover o espaço de trabalho de um determinado trabalho do Jenkins, desde que o trabalho não esteja em execução no momento!

NOTA: Estou assumindo que o seu $JENKINS_HOMEestá definido para o padrão: /var/jenkins_home.

Limpe um espaço de trabalho

rm -rf /var/jenkins_home/workspaces/<workspace>

Limpe todos os espaços de trabalho

rm -rf /var/jenkins_home/workspaces/*

Limpe todos os espaços de trabalho com algumas exceções

Este usa grep para criar uma lista de permissões:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Limpe os 10 maiores espaços de trabalho

Este usa du e sort para listar os espaços de trabalho da maior para a menor. Em seguida, ele usa a cabeça para pegar os primeiros 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Sherwood Callaway
fonte
2
Isso é perigoso, pois os trabalhos podem estar usando esses espaços de trabalho.
aleb
13

Você pode executar o script abaixo em Gerenciar JenkinsConsole de Scripts para deletar as áreas de trabalho de todos os trabalhos de uma vez. Fizemos isso para limpar espaço no sistema de arquivos.

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")
  }
}
Upen
fonte
isso não funciona para mim, ele mostra java.lang.NullPointerException: Não é possível obter a propriedade 'itens' no objeto nulo.
Vincent Gerris
3

Supondo que a questão seja sobre como limpar o espaço de trabalho do trabalho atual, você pode executar:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
aleb
fonte
2

não tem permissão para comentar, portanto:

A resposta do Upen funciona muito bem, mas não se você tiver Jenkins Pipeline Jobs misturado com Freestyle Jobs. Não existe um método como DoWipeWorkspace em trabalhos de pipeline. Portanto, modifiquei o Script para pular aqueles:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

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

você também pode filtrar por nomes de trabalho, se necessário: item.getDisplayName().toLowerCase().contains("release")

achschneid
fonte
1

Você precisará instalar este plugin antes que as opções mencionadas acima apareçam

Plug-in de limpeza do espaço de trabalho

Este plug-in adiciona a caixa de seleção a todas as configurações de trabalho para permitir que você exclua todo o espaço de trabalho antes que qualquer etapa (controle de origem inc) seja executada

Isso é útil para garantir que você sempre comece a partir de um ponto conhecido para garantir como sua construção será executada

Keir
fonte
3
Adicione algumas informações que seu link contém. Resposta apenas com link não é o que procuramos na SO! :)
Chilion
2
Este acréscimo não contém mais informações que esta resposta já não tenha abordado. Na verdade, é muito menos
Liam
0

Se você deseja remover apenas um diretório (ou arquivo), você pode usar Groovy e Gerenciar Jenkins → Console de Scripts para executar um script que o remove.

Por exemplo, você pode ver os arquivos com:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

E então, quando você tiver a pasta que deseja excluir dh, pode simplesmente anexar o próximo código:

dh.deleteDir()

E será excluído.

Observação: o caminho mostrado no exemplo é para uma instalação do Bitnami Jenkins, o seu pode ser diferente.

PhoneixS
fonte
0

Existe uma opção para fazer isso. Configurar -> Ações de pós-construção
A opção vem por padrão pelo menos no Jenkins versão 2.236

franciscorode
fonte