Como reiniciar o Jenkins com segurança?

19

Preciso fazer algumas alterações de configuração em nossa instância do Jenkins que envolvam a reinicialização do Jenkins algumas vezes. No entanto, nossos desenvolvedores estão comprometendo com frequência suficiente para que eu não tenha visto Jenkins sem trabalhos sendo executados em três dias.

Existe uma maneira nativa (através da GUI ou via linha de comando) para reiniciar com segurança o Jenkins? IE: aguarde o término dos trabalhos atuais antes de ir para baixo e acompanhe os trabalhos em fila para iniciar assim que o Jenkins voltar.

Eu sei que há um plugin, mas para instalá-lo, preciso reiniciar o Jenkins ...

Alex
fonte
Acho que do alto da minha cabeça, mas não é uma opção desabilitar os escravos? (tanto quanto eu me lembro ele não parar os trabalhos em curso, mas evitar empregos adicionais na fila para ser lançado)
Tensibai
Em teoria, com uma instância Jenkins configurada corretamente executando tarefas de Pipeline, você pode reiniciar os nós mestre ou escravo sempre que desejar. Minha experiência diz o contrário, no entanto.
Jayhendren

Respostas:

14

Se você navegar, $YOUR_JENKINS_URL/updateCenter/deverá ver a seguinte página:

Aqui você pode verificar Restart Jenkins when installation is complete and no jobs are runningqual deve ser bastante seguro.

eyalzek
fonte
Entendo que a reinicialização só acontece se os plugins estiverem em processo de instalação ... não há como forçar a reinicialização sem a instalação de plugins, existe?
Alex
1
@ Alex Acabei de o testar na minha instância e, para mim, parece sempre funcionar, independentemente da instalação do plugin. De acordo com stackoverflow.com/a/8077830 , também deve haver um /safeRestarte /restartendpoints.
precisa saber é
1
Mas não é a questão de reiniciar enquanto os trabalhos estão em execução?
Dan Cornilescu
@ DanCornilescu, a pergunta afirma:, IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.é exatamente isso que acontece quando você marca essa caixa.
eyalzek
Eu estava perguntando como a pergunta também afirma Jenkins without jobs running in three days- o que significa que haverá um impacto, pois alguns trabalhos serão adiados. Mas ainda assim, melhor do que perder empregos.
Dan Cornilescu
15

Visitar https: // youjenkinsdomain / safeRestart o definirá no modo quando aguardar que os trabalhos parem e, em seguida, reinicie.

Nakilon
fonte
2
Eu precisava usar essa resposta específica quando nosso servidor Jenkins falhou e falhou ao reiniciar quando um plug-in exigia.
kayleeFrye_onDeck
8

Você pode executar o comando safeRestart usando a API do Jenkins Rest ( [jenkins_url] / safeRestart ) ou pode executar o comando via Jenkins CLI .

sudo /etc/init.d/jenkins safeRestart

Executando um Comando CLI

A sintaxe geral é a seguinte (o design é semelhante a ferramentas como svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] comando [opções ...] [argumentos ...]

JENKINS_URL pode ser especificado através da variável de ambiente $ JENKINS_URL. Essa variável de ambiente é definida automaticamente quando o Jenkins bifurca um processo durante as compilações, o que permite que você use a CLI do Jenkins de dentro da compilação sem configurar explicitamente a URL.

NOTA: Ao executar o comando safeRestart, todos os trabalhos configurados para serem executados durante a reinicialização serão enfileirados e executados quando o servidor estiver online novamente. Verifique se isso não causa nenhum conflito ao reiniciar!

PrestonM
fonte
1

Eu acho que este é um problema real que muitos estão tentando resolver. Às vezes, é preferível reiniciar o Jenkins após a instalação do plugin. Uma das sugestões que posso fornecer com base na minha experiência é:

  • Restrinja o acesso ao módulo de administração para que nem todo desenvolvedor possa instalar plug-ins
  • Instrua os desenvolvedores sobre o tempo de inatividade e informe-os com antecedência
  • Instale todos os plugins necessários em massa e reinicie o Jenkins
  • Informe aos desenvolvedores que o Jenkins está pronto para uso

Entendo que isso requer um esforço manual e coordenação. Mas isso funcionou até agora tão bem em nosso projeto, que não causou mal em mencionar.

Karthik Venkatesan
fonte
1

Para reiniciar o Jenkins manualmente, você pode usar um dos seguintes comandos (inserindo o URL em um navegador):

(jenkins_url)/safeRestart- Permite que todos os trabalhos em execução sejam concluídos. Novos trabalhos permanecerão na fila para execução após a reinicialização ser concluída.

(jenkins_url)/restart - Força uma reinicialização sem aguardar a conclusão das compilações.

Subhash
fonte
0

A visita " https: // jenkins / safeRestart " não espera pela conclusão de "jobs / builds" completamente no caso de trabalhos de pipeline.

Parece aguardar as etapas serem concluídas e executar a reinicialização do jenkins e retomar o pipline depois que o jenkins aparecer novamente.

Muhammad Faizan-Ul-Haq
fonte
1
Eu acho que isso significa um comentário para a resposta de @Nakilon?
hagello
0

Jenkins foi projetado para não ser afetado por reinicializações. Pela minha experiência, é possível que uma compilação falhe devido a uma reinicialização, mas elas são raras.

Onde trabalho, costumávamos reiniciar o Jenkins regularmente. Temos todo tipo de trabalho que você pode imaginar, alguns pequenos, outros enormes. Somente uma vez vimos uma construção falhar onde um picles não estava sendo reidratado.

Depois disso, sempre fazemos reinicializações seguras agora.

Gi0rgi0s
fonte