1. 程式人生 > >持續整合高階篇之基於win32-openssh搭建jenkins混合叢集(一)

持續整合高階篇之基於win32-openssh搭建jenkins混合叢集(一)

系列目錄

前面的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.ps1FixUserFilePermissions.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所在的目錄.