前面的demo我們使用的都是只有一個windows主節點的的jenkins,實際生產環境中,一個節點往往是不能滿足需求的.比如,.net項目要使用windows節點構建,java項目如果部署在linux服務器上往往也需要目標類型的linux節點做為構建節點,開發中使用的jdk版本不同也可能需要不同的構建主機.構建docker鏡像往往也需要linux主機(強烈不建議使用docker for windows 進行linux環境的docker構建).本節我們講解如何搭建一個主節點為windows server主機,從節點同時包含windows server和centos的jenkins集群
需要注意的是,由於windows不支持ssh(至少目前絕大多數線上的windows server主機是這樣的),因此windows從節點往往是通過JNLP
的方式搭建的.而linux則相對較為簡單,只需要配置ssh即可.
使用JNLP
配置從節點雖然也不十分復雜,但是缺點也比較明顯.那就是需要在目標主機上啟動一個控制台程序,一方面這個程序容易被誤關,另一方面如果windows server重啟則需要手動把它啟動起來,這樣極大增加了工作量.如果運維的工作負荷非常高,很可能在一次大規模主機重啟后忘記重啟一些軟件,這樣很多錯誤可能在已經影響使用的情況下才會發現.因此,這里我們探索一種新的方式,即使用微軟公司開發的win32-openssh
(現已集成到windows 10和windows server 2019),配置也非常方式.有了win32-openssh,我們就可以像linux主機一樣使用ssh方式配置windows從節點.雖然我們提倡使用win32-openssh,但是仍然會介紹如何使用JNLP來配置windows從節點
經過筆者測試,win32-openssh支持windows server 2008及以上版本,目前恐怕沒有更老的服務器版本了吧,大家不用擔心生產環境無法使用的問題.當然,win32-openssh的用途絕不僅限於搭建jenkins混合集群,還可以用它完成更多的基於windows的自動化管理工作.筆者基於win32-openssh做了一套windows服務的自動化管理工具(支持windows服務的關閉,更新,啟動,重啟,停止,擴容等功能),目前部署在大約30台線上服務器上.
安裝win32-openssh
前面我們說到要基於win32-openssh來基於ssh配置Jenkins的windows從節點,這節我們就先介紹如何安裝win32-openssh,然后緊接着開始使用ssh配置jenkins windows從節點.
linux從節點ssh配置也是一樣,因此不再單獨介紹linux從節點的ssh配置
我們進入openssh-win32github頁面進行下載,根據自己系統位數選擇32位或者64位的.
下載完成以后進行解壓,把解壓后的文件夾放到C盤(也可以是其它盤),然后進入文件夾里面,內容類似如下:
在當前目錄下打開powershell(或者從其它位置打開,cd到當前目錄),在powershell命令窗口輸入 .\install-sshd.ps1
,執行安裝命令.
如果在執行過程中powershell報錯,提示權限不足,則進行以下設置
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
,很多網上的教程沒有指定scope,則很容易造成安全問題,在個人電腦上無所謂,在服務器上一定要重視過高的權限.
完了以后再執行FixHostFilePermissions.ps1
和FixUserFilePermissions.ps1
這兩個文件.(在powershell命令窗口輸入.\文件名
).
啟動ssh服務.
安裝完成以后,ssh相關服務默認是不啟動的,我們打開服務管理界面,手動啟動它們並把啟動類型設置為自動,這樣服務器重啟開機時ssh相關的服務就會自動啟動.
windows10開啟ssh
windows較新的版本已集成了openssh,但是需要手動開啟它.
- 進入
我的電腦
,然后點擊上面的計算機
標簽,然后選擇卸載或更新應用
- 在出現的界面里選擇
管理額外功能
- 點擊
添加功能
,然后在出現的列表里找到ssh相關的功能,都添加上
把openssh所在文件夾添加到path
我們把win32-openssh所在文件夾路徑添加到環境變量path里,這樣我們就可以在控制台輸入ssh
命令來連接遠程主機,而不需要類似xshell,putty這樣的終端工具.
生成ssh key
添加完環境變量后,我們打開cmd或者powershell命令窗口,輸入ssh-keygen
命令,生成ssh key,輸入命令后一路回車.最終生成的key存放在C:/Users/當前用戶名/.ssh/
目錄下.
其中id_rsa
為私鑰,id_rsa.pub
為公鑰,authorized_keys
為授權訪問本機的遠程電腦的公鑰,known_hosts
為,初次訪問遠程主機時存儲的信息.晚些時候我們會用到這些文件.
安裝完ssh以后如果忘記了它的安裝位置,打開命令窗口,輸入
where ssh
就可以看到ssh.exe所在的目錄.