重啟所有Jenkins節點

重啟所有Jenkins節點

我管理一個 Jenkins 伺服器(運行 2.89.4),連接了大約 40 個節點,每個節點運行 Centos7、OSX 或 Windows(7、8、10)。最近,我們遭遇了一些停電,許多奴隸失去了與主人的連結。這需要大量的手動遠端處理和 ssh'ing 來重新連接它們。因為,我已經確保每個從屬進程都在運行一個伺服器,但是我想要一個額外的安全網,能夠自動重新啟動這些從屬進程正在運行的每個虛擬機器和/或盒子。問題是,由於有幾種不同類型的作業系統,因此沒有簡單的方法可以做到這一點(據我所知)。

我嘗試使用 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 批次命令,針對 unix 部分執行 Shell。以下分別是我的 Batch 和 Shell 框框中的內容:

批:

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

殼:

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

我現在在工作中註解掉了關閉步驟,這樣我就不會在測試之前意外地重新啟動所有內容。在嘗試執行此命令之前,請務必取消註釋它們。

Unix_條件_步驟 Windows_Conditional_Step

相關內容