現在我們已經搭建好了基本的Jenkins環境,在這一集里,我們說一說如何管理節點。
進入“系統管理”中的“管理節點”。
創建Windos系統的奴隸節點
先創建一台安裝了Win7系統的虛擬機,作為Jenkins構建的奴隸節點。比如我這台機器IP為172.16.12.81,用戶名為user1,密碼為123456。然后在C盤創建路徑 C:\ci_jenkins 作為Jenkins操作的根目錄。另外還需要在這台機器上安裝JDK或JRE,我以前配置時這里如果使用64位的JDK會有問題,所以我也不再實驗了,這里直接安裝32位的JDK。
在Jenkins的“管理節點”頁面上,點擊“新建節點”,類型選擇“Dumb Slave”,名稱比如叫“172.16.12.81_win7”,點擊“OK”按鈕進入設置頁面。
其中“# of executors”我們選擇4,表示可以同時進行4個構建。
“Remote FS root”填寫之前創建的目錄 C:\ci_jenkins
“Labels” 是這樣的,假如你的需求是要求同時在 WindowsXP,Win7這兩個操作系統上構建,你就創建兩個奴隸節點,一個安裝WindowsXP系統,一個安裝Win7系統,這兩個節點的名稱不一樣,但Labels 可以設置成一樣的 win,這樣在創建Job時指定在Label為win的節點上構建時,兩台機器都會進行構建,當然這里可以用空格分隔地添加幾個Label。
“Launch method”這里我們選擇“Let Jenkins control this Windows slave as a Windows service”,這種配置方式有點自虐,不過配置好的話是最好用的。
點擊“高級”按鈕,在“Path to java executable”輸入java路徑,特別注意,不能寫成 java.exe。
保存后,點擊“Launch slave agent”按鈕。看到下面的錯誤信息:
別急,意料之中。在上個頁面中你留意到有這么一個鏈接“subtle problems”,里面就是配置windows系統奴隸節點的常見問題。
我們回到Win7這台奴隸節點,按照鏈接里的內容好好修理修理它。
首選要保證這個用戶是本地的“Administrator”組成員,如果你和我一樣是在安裝操作系統時創建的用戶,這一條是滿足的。
點擊“開始”按鈕,輸入“gpedit.msc”,打開“本地組策略編輯器”。
在“計算機配置”→“管理模版”→“系統”→“用戶配置文件”中,將“在用戶注銷時不要強制卸載用戶注冊表”設置為“已啟用”。
下面就是設置防火牆的策略了,這個我嫌麻煩,干脆把防火牆關閉了。
接下來打開“注冊表編輯器”
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下面創建一個 DWORD(32-位)值。
設置 LocalAccountTokenFilterPolicy 值 1。
按 Ctrl + F,搜索 “{76A64158-CB41-11D1-8B02-00600806D9B6}”,右鍵選擇“權限”,需要注意的是,它在 HKEY_CLASSES_ROOT\CLSID 下。
點擊“高級”
切換到“所有者”頁簽,將“當前所有者”修改為“Administrators”組。
再切換到“權限”頁簽,選擇“Administrators”組,點擊“編輯”按鈕,修改成“完全控制”。
再把“所有者”切換回“TrustedInstaller”(NT Service\TrustedInstaller)
注冊表都設置好以后,最好注銷再登錄一下,讓注冊表生效。
在“計算機管理”的“服務”中,找到“Remote Registry ”服務。
啟動它,並設置啟動類型為“自動”。
現在重新在Jenkins頁面上點擊“Launch slave agent”按鈕。
看到已經成功連接的提示
回到首頁,可以看到Win7的系統已經就緒。
創建類Unix系統(Linux,OSX等)的奴隸節點
對於類Unix系統,創建節點就要簡單許多,一般默認都安裝了SSH的服務,我們的計划是讓Jenkins通過SSH來登錄並管理奴隸節點。但通過用戶名和密碼訪問SSH不是一個特別好的方式,我們可以配置通過私鑰的方式來登錄SSH。
比如我們以一台CentOS系統的虛擬機為例,假設IP為172.16.12.82。我們先在上面創建一個用於登錄的用戶jenkins。然后登錄到這個用戶。
生成一個密鑰對(這中間會有幾次詢問,都直接輸入回車)。
- [jenkins@svr82 ~]$ ssh-keygen -t rsa
- Generating public/private rsa key pair.
- Enter file in which to save the key (/home/jenkins/.ssh/id_rsa):
- Created directory '/home/jenkins/.ssh'.
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in /home/jenkins/.ssh/id_rsa.
- Your public key has been saved in /home/jenkins/.ssh/id_rsa.pub.
- The key fingerprint is:
- 6b:81:28:af:5e:54:bb:af:cf:e3:f5:2d:0a:aa:50:71 jenkins@svr82.vow.funshion.com
- [jenkins@svr82 ~]$
現在可以看到在jenkins用戶的家目錄下的 .ssh 目錄下創建了兩個密鑰:公鑰 id_rsa.pub 和私鑰 id_rsa。
- [jenkins@svr82 ~]$ ls -l ~/.ssh/
- 總計 8
- -rw------- 1 jenkins jenkins 1675 10-14 18:26 id_rsa
- -rw-r--r-- 1 jenkins jenkins 412 10-14 18:26 id_rsa.pub
現在將公鑰添加到這台主機的 authorized_keys 文件中,並修改權限為600
- [jenkins@svr82 .ssh]$ pwd
- /home/jenkins/.ssh
- [jenkins@svr82 .ssh]$ cat id_rsa.pub >> authorized_keys
- [jenkins@svr82 .ssh]$ chmod 600 authorized_keys
現在 id_rsa 和 id_rsa.pub 這兩個文件不是必須要保留的這台服務器上,但你要保存好 id_rsa 因為這個是訪問此服務器的私鑰。
還有一點需要特別注意的是假如你的 ~/.ssh 目錄是自己手動創建的,或者 id_rsa 從其他地方拷貝來的,如果此時發現無法通過私鑰進行 ssh 連接時,請檢查下面文件/目錄的權限是否和我列出的一樣。
- [jenkins@svr82 ~]$ ls -l ~/.ssh/authorized_keys
- -rw------- 1 jenkins jenkins 412 10-14 18:51 /home/jenkins/.ssh/authorized_keys
- [jenkins@svr82 ~]$ ls -l ~/.ssh/id_rsa
- -rw------- 1 jenkins jenkins 1675 10-14 18:26 /home/jenkins/.ssh/id_rsa
- [jenkins@svr82 ~]$ ls -ld ~/.ssh
- drwx------ 2 jenkins jenkins 4096 10-14 18:51 /home/jenkins/.ssh
回到Jenkis的頁面上,我們先來配置一下訪問這個服務器的“Credential”,在Jenkins頁面的左側快捷欄中點擊“Credentials”
這里面有個憑據域的概念,其實他的目的就是,假如我們配置了很多登錄服務器的憑據,通過各個域來分類整理這些憑據,比如所有訪問服務器A的憑據都在一個域里這種情況。我們目前暫時先不創建域,直接選擇默認的“Global credentials”,點擊左側的“Add Credentials”添加訪問服務器的憑據。
在“Kind”里,我們選擇“SSH Username with private key”;“Username”這里輸入登錄上面服務器的用戶名“jenkins”;“Private Key”這里選擇“Enter directly”,輸入內容就是上面步驟里創建的 id_rsa 文件內容。
下面在這台CentOS服務器上裝好JDK,准備工作基本上完成了。
- [root@svr82 ~]# java -version
- java version "1.6.0_25"
- Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
- Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
下面在Jenkins的“系統管理”→ “管理節點”中點擊“新建節點”,填寫內容和之前創建Windows節點類似。
在“Launch method”中選擇“Launch slave agents on Unix machines via SSH”;“Credentials”這里選擇我們剛剛創建的憑據。
特別要注意的是“JVM Options”這里,“-Djava.awt.headless=true”不是每個類Unix系統都必須輸入,但我發現在蘋果的OSX系統中不設置會報錯誤“Can't connect to window server - not enough permissions.”。
連接成功!
現在我們有兩個可以用的奴隸節點了: