모든 Jenkins 노드 다시 시작

모든 Jenkins 노드 다시 시작

저는 각각 Centos7, OSX 또는 Windows(7, 8, 10)를 실행하는 약 40개 정도의 노드가 연결된 Jenkins 서버(2.89.4 실행)를 관리합니다. 최근에 정전이 발생하여 많은 슬레이브가 마스터와의 연결이 끊어졌습니다. 이를 위해서는 모두 다시 연결하기 위해 많은 수동 원격 및 SSH 연결이 필요했습니다. 이후 각 슬레이브 프로세스가 서버를 실행하고 있는지 확인했지만 이러한 슬레이브가 실행 중인 모든 vm 및/또는 상자를 자동으로 다시 시작할 수 있는 추가 안전망이 필요합니다. 문제는 여러 가지 유형의 운영 체제가 있기 때문에 이를 수행하는 간단한 방법이 없다는 것입니다(아직 제가 알고 있습니다).

Groovy 스크립트를 사용해 보았지만 이는 대부분 시스템 자체가 아닌 슬레이브 서비스를 다시 시작하는 데만 사용될 수 있습니다. 이것은 내 참조였습니다. https://wiki.jenkins.io/display/JENKINS/Monitor+and+Restart+Offline+Slaves

또한 Ansible 접근 방식을 살펴봤지만 많은 시스템에 연결할 수 없으며 Ansible에는 Windows와 Unix에 대해 서로 다른 유형의 스크립트가 필요합니다.

지금까지 본 최고의 접근 방식은 다음과 같습니다. https://stackoverflow.com/questions/29165080/restart-jenkins-slave-from-master

그러나 모든 단일 슬레이브에서 이것을 실행하는 방법을 설명하지는 않습니다. 단지 하나의 슬레이브에서 실행되는 것처럼 보입니다. 이전에 다른 사람이 이런 일을 한 적이 있습니까? 나는 실행할 수 있는 단일 작업이나 단일 스크립트를 생성하고 shutdown -r -f플랫폼에 관계없이 Jenkins에 연결된 모든 단일 노드(예: 명령 사용)를 다시 시작하고 싶습니다 .

답변1

다중 구성 작업을 생성하고 이름별로 모든 슬레이브를 선택하여 이 문제를 해결했습니다. 그런 다음 "실행 노드"를 기반으로 두 개의 조건부 단계를 추가했습니다. 첫 번째 슬레이브에는 Windows 슬레이브만 선택했고 두 번째 슬레이브에는 Mac/Centos 슬레이브만 선택했습니다. 각 조건부 단계에 대해 Windows 조건에 대해 Windows Batch Command 실행, unix 섹션에 대해 Shell 실행이라는 단일 단계를 추가했습니다. 내 Batch 및 Shell 상자의 내용은 각각 다음과 같습니다.

일괄:

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

껍데기:

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

테스트하기 전에 실수로 모든 것을 다시 시작하지 않도록 현재 작업에서 종료 단계를 주석 처리했습니다. 이것을 실행하기 전에 해당 항목의 주석 처리를 제거하십시오.

Unix_Conditional_Step Windows_Conditional_Step

관련 정보