Nosso servidor Jenkins tem um trabalho em execução há três dias, mas não está fazendo nada. Clicar no pequeno X no canto não faz nada, e o log de saída do console também não mostra nada. Eu verifiquei nossos servidores de compilação e o trabalho não parece estar em execução.
Existe uma maneira de dizer a Jenkins que o trabalho está "concluído", editando algum arquivo ou bloqueio ou algo assim? Como temos muitos trabalhos, não queremos realmente reiniciar o servidor.
Respostas:
Vá para "Gerenciar Jenkins"> "Console de scripts" para executar um script no servidor para interromper o encadeamento.
Você pode obter todos os threads ativos
Thread.getAllStackTraces()
e interromper o que está pendurado.ATUALIZAR:
A solução acima usando threads pode não funcionar nas versões mais recentes do Jenkins. Para interromper pipelines congelados, consulte esta solução (por alexandru-bantiuc ) e execute:
fonte
t -> println(t.getName());
t.getName()=="SOME NAME"
?t.stop
:Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
Eu também tive o mesmo problema e o corrigi via Jenkins Console.
Vá para "Gerenciar Jenkins"> "Console de scripts" e execute um script:
Você terá que especificar seu JobName e JobNumber.
fonte
Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();
Depois de executar este e outro jenkins reiniciar, a compilação zombie finalmente desapareceu.finish
no AbstractBuild nem no FreeSyleBuild nem no MavenModulesetBuildgroovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
Caso você tenha um emprego de Pipeline Multibranch (e você seja um administrador da Jenkins), use no Jenkins Script Console este script:
De https://issues.jenkins-ci.org/browse/JENKINS-43020
Se você não tiver certeza de qual é o nome completo (caminho) do trabalho, use o seguinte snippet para listar o nome completo de todos os itens:
De https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs
fonte
Eu uso o plug - in de monitoramento para esta tarefa. Após a instalação do plugin
Procure o nome do trabalho suspenso
O nome do segmento começará assim
Executor #2 for master : executing <your-job-name> #<build-number>
Clique no botão redondo e vermelho à direita na tabela da linha que o trabalho desejado possui
fonte
Uma vez encontrei uma compilação que não podia ser interrompida pelo "Script Console". Finalmente, resolvi o problema com estas etapas:
fonte
A primeira solução proposta está bem próxima. Se você usar stop () em vez de interrupção (), ele mata threads em fuga, que são executados infinitamente em um script de sistema groovy. Isso matará qualquer construção executada para um trabalho. Aqui está o código:
fonte
contains
aqui é incorreto e perigoso - se o nome do seu trabalho for "Executar Testes", ele também matará todos os trabalhos chamados "Executar Testes - Integração", "Executar Testes - Unidade", etc. Qualquer pessoa que use isso precisará ter cuidado para não terminar os trabalhos não relacionados inesperadamenteSe você tiver um trabalho de pipeline imparável, tente o seguinte:
Jenkins perceberá que o trabalho deve ser encerrado e interrompe a construção
fonte
Sem ter que usar o console de script ou plugins adicionais, você pode simplesmente abortar uma compilação digitando
/stop
,/term
ou/kill
após o URL de construção no seu browser.Citando literalmente a partir do link acima:
fonte
O plug-in de tempo limite de compilação pode ser útil para esses casos. Ele matará o trabalho automaticamente se demorar demais.
fonte
Eu acho que é tarde demais para responder, mas minha ajuda a algumas pessoas.
Não tenho reputação suficiente para postar imagens, desculpe.
Espero que possa ajudar
fonte
A resposta principal quase funcionou para mim, mas eu tinha um grande problema: eu tinha um número muito grande (~ 100) de trabalhos de zumbi devido a um reinício Jenkins particularmente em um período de tempo insuficiente, encontrando manualmente o nome do trabalho e o número de compilação de cada um. todo trabalho de zumbi e depois matá-los manualmente era inviável. Veja como eu automaticamente encontrei e matei os trabalhos de zumbi:
Esse script faz um loop em todas as compilações de todos os trabalhos e usa
getResult().equals(null)
para determinar se o trabalho foi ou não concluído. Uma construção que está na fila, mas ainda não foi iniciada, não será repetida (uma vez que essa construção não estarájob.builds
), e uma construção concluída já retornará algo diferente denull
parabuild.getResult()
. Um trabalho legitimamente em execução também terá um resultado de compilaçãonull
, portanto, verifique se você não possui trabalhos em execução que não deseja eliminar antes de executá-lo.Os vários loops aninhados são principalmente necessários para descobrir todas as ramificações / PR de todos os repositórios em um projeto Multibranch Pipeline; se você não estiver usando pipelines multibranch, poderá percorrer todos os seus trabalhos diretamente com algo parecido
Jenkins.instance.getItems().each
.fonte
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Eu olhei para a fonte Jenkins e parece que o que estou tentando fazer é impossível, porque a interrupção de um trabalho parece ser feita através de uma interrupção do Thread. Eu não tenho idéia do porquê o trabalho está pendurado ..
Editar:
Possíveis razões para trabalhos imparáveis:
fonte
Eu costumo usar Jenkins-cli nesses casos. Você pode baixar o jar de uma página
http://your-jenkins-host:PORT/cli
. Então corraInformações auxiliares:
Você também pode passar por várias versões, como
350:400
. Ajuda geral disponível executandoAjuda de comando de contexto para
delete-builds
porfonte
A resposta de Alexandru Bantiuc funcionou bem para eu interromper a compilação, mas meus executores ainda estavam aparecendo como ocupados. Consegui limpar o status de executor ocupado usando o seguinte
fonte
Teve esse mesmo problema, mas não havia thread de pilha. Excluímos o trabalho usando esse snippet no Jenkins Console. Substitua jobname e construa dnumber pelo seu.
fonte
Recentemente, deparei com um nó / agente que tinha um executor ocupado por dias por uma compilação "X" de uma tarefa de pipeline, embora a página de tarefas reivindicasse a compilação "X" não existisse mais (descartada após 10 compilações subsequentes (!), Como configurado no trabalho de pipeline). Verificou que no disco: a compilação "X" se foi realmente.
A solução: foi o agente / nó que relatou erroneamente que o executor ocupado estava ocupado executando a compilação "X". A interrupção do encadeamento do executor a liberou imediatamente.
Outras respostas consideradas:
Thread.getAllStackTraces()
: nenhum tópico correspondente.getBuildByNumber()
: não se aplicaram, pois a compilação não estava mais lá!Atualização:
Experimentei novamente uma situação semelhante, em que um Executor foi ocupado por dias por uma construção de pipeline concluída (ainda existente). Esse trecho de código foi a única solução funcional.
fonte
Eu tive o mesmo problema na última meia hora ...
Não foi possível excluir uma compilação de zumbis em execução no meu pipeline de várias ramificações. Mesmo o servidor reinicia pela interface do usuário ou mesmo pela linha de comando via
sudo service jenkins restart
bloqueou a execução ... A compilação não foi interrompida ... Sempre reapareceu.Fiquei muito chateado, mas ... ao olhar para o log da compilação, encontrei algo interessante no final do log:
As partes marcadas em vermelho são as "partes frustrantes" ... Como você pode ver, eu sempre quis abortar a construção da interface do usuário, mas não funcionou ...
Mas existe um hiperlink com texto
Click here to forcibly terminate running steps
... (primeiro verde) Agora eu pressionei o link ...) Após a execução do link, uma mensagemStill paused
apareceu com outro LinkClick here to forcibily kill entire build
(segundo verde) Depois de pressionar esse link, a construção finalmente ficou difícil morto ...Portanto, isso parece funcionar sem nenhum plug-in especial (exceto o próprio plug-in de compilação multibranch-pipeline).
fonte
tail
ou um visualizador de log para obter o link?<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
Eu tinha muitos empregos de zombi, então usei o seguinte script:
fonte
Isso funciona para mim sempre:
Obrigado ao funql.org
fonte
Já tive o mesmo problema duas vezes agora, o único sofá de correção foi reiniciar o servidor tomcat e reiniciar a compilação.
fonte
Um utilitário que escrevi chamado jkillthread pode ser usado para interromper qualquer encadeamento em qualquer processo Java, desde que você possa efetuar login na máquina que está executando o serviço na mesma conta.
fonte
SOLUÇÃO MUITO SIMPLES
O motivo pelo qual eu estava vendo esse problema era um
http
link incorreto na página, em vez dehttps
interromper o trabalho. Tudo o que você precisa fazer é editar oonclick
atributo na página html, seguindoonclick
atributo para editar seu valors
ahttp
terhttps
Usar captura de tela para referência
fonte
Usando o console Script em https: // my-jenkins / script
fonte
Nenhuma dessas soluções funcionou para mim. Eu tive que reiniciar a máquina em que o servidor estava instalado. O trabalho inábil agora se foi.
fonte
Você pode simplesmente copiar o trabalho e excluir o antigo. Se não importa que você tenha perdido os logs de compilação antigos.
fonte
Aqui está como eu corrigi esse problema na versão
2.100
com Blue Oceanssh
na minha caixa Jenkinscd ~/.jenkins
(onde eu mantenho Jenkins)cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>
Depois disso, é possível alterar opcionalmente o número em
nextBuildNumber
(fiz isso).Finalmente, reiniciei o jenkins (
brew services restart jenkins
) Esta etapa obviamente será diferente dependendo de como você gerencia e instala o Jenkins.fonte
Digite a interface do usuário do blue-ocean. Tente parar o trabalho a partir daí.
fonte