1. 程式人生 > >Jenkins的分散式構建及部署——節點

Jenkins的分散式構建及部署——節點

一 什麼是Jenkins的分散式構建和部署

  Jenkins的分散式構建,在Jenkins的配置中叫做節點,分散式構建能夠讓同一套程式碼或專案在不同的環境(如:Windows和Linux系統)中編譯、部署等。

二 什麼時候使用節點和作用

  當我們使用多臺伺服器時,並且配置了tomcat或jboss叢集服務,可通過jenkins的節點配置,將jenkins專案釋出在不同伺服器上(分佈jenkins工作空間,部署專案到不同伺服器的tomcat或jboss),這就形成了jenkins的分散式。節點伺服器不需要安裝jenkins(只需要執行一個slave節點服務),構建事件的分發由master端(jenkins主服務)來執行。

三 節點伺服器的要求

注意:如果節點主機上不存在JDK,Jenkins會去自動下載,但Oracle對程式自動下載做了限制,會導致下載失敗,然後一直迴圈這個問題。

建議:所有Linux或者Windows機器的環境路徑統一(如:JDK、Maven),安裝位置和jenkins所在伺服器的JDK和maven必須一致,也就是說jenkins所在伺服器和各個節點伺服器中的JDK和Maven目錄和檔名都是一樣的。以便於管理、不容易出現問題。

四 節點管理

通常的情況下在我們的一個專案當中,專案會有多個分支系統,而我們不可能為每個分支系統都配置一個jenkins服務,這樣既浪費資源,也增加構建部署的難度,為了解決這個問題jenkins給使用者提供了非常強大的分散式部署功能,也就是節點的管理,我們只需要在master節點配置好jenkins服務,通過指定slave節點來進行對應的系統進行部署就可以達到分散式部署
系統管理,進入管理節點頁面



jenkins服務所在伺服器為master節點,master負責分發任務給slave節點
這裡展示了節點的部分資訊


以windows為例 slave節點配置

1.點選新建節點


2.輸入節點的名稱,並且選中permanent agent,點選ok


3.節點建立成功後會自動跳轉到配置頁面
名字:節點的名字
描述:說明這個節點的用途等
of executors:併發構建數量
遠端工作目錄:用於存放jenkins的工作空間的
標籤:分配job會以標籤的名稱去分配
用法:節點的使用策略
啟動方法:windows的話就不要給自己添堵了,選擇 Java web start


4.這時節點也配置好了,但是slave節點還是沒有連線的狀態,這時我們使用slave機器進入Jenkins的管理節點頁面



點選該節點,進入節點頁面,可能出現這樣的狀態



點選Go to security configuration screen and change it,然後將 TCP port for JNLP agents選擇隨機選取



然後進入控制面板,將防火牆關閉(不做描述,自行處理)
回到slave頁面,這時頁面出現launch 按鈕



點選launch ,這時會讓我們下載一個檔案,下載到我們的slave節點的遠端工作目錄就可以了

點選圖中的launch按鈕,他會提示你下載該檔案slave-agent.jnlp.按照提示下載該檔案,並儲存在本地。我們這裡需要確認兩個問題是否存在:

問題一,確認slave-agent.jnlp 是用javaws來執行的,而不是java.exe 或者是javaw.exe來執行,因為一般的機器預設是採用java.exe啟動的。我曾經因為這個問題折騰了好久。

問題二,將slave-agent.jnlp用notepad開啟後,確認其中的URL是可用的Jenkins地址。其中的配置可能是這樣的:

<jnlpspec="1.0+"codebase="http://16.158.69.53:9999/jenkins/computer/irshost12.tc.tb.com/"><information><title>Slave Agent for irshost12.tc.tb.com</title><vendor>Jenkins project</vendor><homepagehref="https://jenkins-ci.org/"/></information><security><all-permissions/></security><resources><j2seversion="1.5+"/><jarhref="http://16.158.69.53:9999/jenkins/jnlpJars/remoting.jar"/><propertyname="hudson.showWindowsServiceInstallLink"value="true"/></resources><application-descmain-class="hudson.remoting.jnlp.Main"><argument>60c101541d377ad629da21b37c24cd6227edef74b97ff663c5b09e261ac2d5d6</argument><argument>irshost12.tc.tb.com</argument><argument>-url</argument><argument>http://16.158.69.53:9999/jenkins/</argument></application-desc></jnlp>

確認其中的url地址是上面的正確的地址,而不是localhost,因為我的jenkins部署在本地測試。

安裝slave-agent.jnlp之前必須要在節點伺服器安裝JDK環境,至於如何安裝JDK這裡就不在說明了,網上教程很多,下面安裝slave-agent.jnlp,雙擊slave-agent.jnlp檔案,出現下圖介面:



然後雙擊slave-agent,出現connected說明連線成功

上面的視窗關閉或者電腦重啟後,這個節點也就關閉了,所以最好把這個節點加入window服務。

點選視窗的file選單,點選Install as a service,完成

  

成功示例:(紅框所示)



現在回到jenkins的管理節點頁面,重新整理一下介面,發現slave節點的紅色 的那個X已經沒有了,說明連線成功


5.關聯job,進入job的配置頁面,勾選Restrict where this project can be run,並且在Label Expression輸入奴隸節點的標籤名(一個標籤有可能對應多臺slave節點),也可以輸入slave節點的名稱


6.配置一條構建的命令


7.進行構建,檢視控制檯資訊,可以看到執行的確實是windows的機器


linux與mac的配置大同小異,只需稍加改動就可以了,這樣配置好之後就可以實現分散式構建,在做自動化測試的時候我們只需要將測試伺服器配置為slave節點,配置好相應的job來監控開發job或者開發的程式碼是否有變動或者構建的動作,根據自己的情況執行測試專案的構建動作,從而實現持續整合

在安裝過程中,可能會出現以下報錯,導致安裝失敗:


在一些文件中,說是主機不信任客戶機,但是沒有說明該如何去解決(主機和客戶機兩邊的防火牆都已經關閉了)

最終我用以下的方法成功運行了它:將"slave-agent.jnlp“檔案用notepad開啟,將文字中的“localhost”用主機的IP地址去代替,儲存檔案後用Java開啟(Launch)即可;