Reinicie todos os nós Jenkins

Reinicie todos os nós Jenkins

Eu gerencio um servidor Jenkins (executando 2.89.4) com cerca de 40 nós conectados, cada um executando Centos7, OSX ou Windows (7, 8, 10). Recentemente, sofremos alguns cortes de energia e muitos escravos perderam a conexão com o mestre. Isso exigiu muita comunicação remota manual e ssh para reconectar todos eles. Desde então, certifiquei-me de que cada processo escravo esteja executando um servidor, no entanto, gostaria de ter uma rede de segurança adicional para poder reiniciar automaticamente cada VM e/ou caixa em que esses escravos estão sendo executados. O problema é que, como existem vários tipos diferentes de sistemas operacionais, não existe uma maneira simples de fazer isso (que eu conheça ainda).

Eu tentei usar um script Groovy, mas ele pode ser usado principalmente para reiniciar o serviço escravo, não a máquina em si. Esta foi minha referência: https://wiki.jenkins.io/display/JENKINS/Monitor+and+Restart+Offline+Slaves

Também examinei uma abordagem Ansible, mas muitas máquinas são inacessíveis e o Ansible requer diferentes tipos de scripts para Windows versus Unix.

A melhor abordagem que vi até agora está aqui: https://stackoverflow.com/questions/29165080/restart-jenkins-slave-from-master

Mas não explica como executar isso em cada escravo, apenas parece que é executado em um escravo. Alguém mais fez algo assim antes? Eu adoraria criar um único trabalho ou script único que pudesse ser executado e reiniciasse cada nó (usando um comando como shutdown -r -f) conectado ao Jenkins, independentemente da plataforma.

Responder1

Resolvi isso criando um trabalho de configuração múltipla e selecionando todos os escravos por nome. Em seguida, adicionei duas etapas condicionais baseadas no "Nó de execução". Selecionei apenas os escravos do Windows para o primeiro e apenas os escravos do Mac/Centos para o segundo. Para cada etapa condicional, adicionei uma única etapa: Executar comando em lote do Windows para a condição do Windows e Executar Shell para a seção unix. Aqui está o conteúdo das minhas caixas Batch e Shell, respectivamente:

Lote:

echo "Restarting Windows Machine...."
hostname
shutdown -r -f

Concha:

echo "Restarting Unix Machine...."
hostname
sudo shutdown -r now

Comentei as etapas de desligamento por enquanto em meu trabalho para não reiniciar tudo acidentalmente antes do teste. Certifique-se de descomentá-los antes de tentar executar isso.

Unix_Conditional_Step Windows_Conditional_Step

informação relacionada