Jenkins實(shí)戰(zhàn)演練之Linux節(jié)點(diǎn)任務(wù)配置
現(xiàn)在我們已經(jīng)搭建好了基本的Jenkins環(huán)境,在這一集里,我們說(shuō)一說(shuō)如何管理節(jié)點(diǎn)。進(jìn)入“系統(tǒng)管理”中的“管理節(jié)點(diǎn)”。

創(chuàng)建Windos系統(tǒng)的奴隸節(jié)點(diǎn)
先創(chuàng)建一臺(tái)安裝了Win7系統(tǒng)的虛擬機(jī),作為Jenkins構(gòu)建的奴隸節(jié)點(diǎn)。比如我這臺(tái)機(jī)器IP為172.16.12.81,用戶名為user1,密碼為123456。然后在C盤(pán)創(chuàng)建路徑 C:\ci_jenkins 作為Jenkins操作的根目錄。另外還需要在這臺(tái)機(jī)器上安裝JDK或JRE,我以前配置時(shí)這里如果使用64位的JDK會(huì)有問(wèn)題,所以我也不再實(shí)驗(yàn)了,這里直接安裝32位的JDK。
在Jenkins的“管理節(jié)點(diǎn)”頁(yè)面上,點(diǎn)擊“新建節(jié)點(diǎn)”,類(lèi)型選擇“Dumb Slave”,名稱比如叫“172.16.12.81_win7”,點(diǎn)擊“OK”按鈕進(jìn)入設(shè)置頁(yè)面。
其中“# of executors”我們選擇4,表示可以同時(shí)進(jìn)行4個(gè)構(gòu)建。
“Remote FS root”填寫(xiě)之前創(chuàng)建的目錄 C:\ci_jenkins
“Labels” 是這樣的,假如你的需求是要求同時(shí)在 WindowsXP,Win7這兩個(gè)操作系統(tǒng)上構(gòu)建,你就創(chuàng)建兩個(gè)奴隸節(jié)點(diǎn),一個(gè)安裝WindowsXP系統(tǒng),一個(gè)安裝Win7系統(tǒng),這兩個(gè)節(jié)點(diǎn)的名稱不一樣,但Labels 可以設(shè)置成一樣的 win,這樣在創(chuàng)建Job時(shí)指定在Label為win的節(jié)點(diǎn)上構(gòu)建時(shí),兩臺(tái)機(jī)器都會(huì)進(jìn)行構(gòu)建,當(dāng)然這里可以用空格分隔地添加幾個(gè)Label。
“Launch method”這里我們選擇“Let Jenkins control this Windows slave as a Windows service”,這種配置方式有點(diǎn)自虐,不過(guò)配置好的話是最好用的。
點(diǎn)擊“高級(jí)”按鈕,在“Path to java executable”輸入java路徑,特別注意,不能寫(xiě)成 java.exe。

保存后,點(diǎn)擊“Launch slave agent”按鈕。看到下面的錯(cuò)誤信息:

別急,意料之中。在上個(gè)頁(yè)面中你留意到有這么一個(gè)鏈接“subtle problems”,里面就是配置windows系統(tǒng)奴隸節(jié)點(diǎn)的常見(jiàn)問(wèn)題。

我們回到Win7這臺(tái)奴隸節(jié)點(diǎn),按照鏈接里的內(nèi)容好好修理修理它。
首選要保證這個(gè)用戶是本地的“Administrator”組成員,如果你和我一樣是在安裝操作系統(tǒng)時(shí)創(chuàng)建的用戶,這一條是滿足的。
點(diǎn)擊“開(kāi)始”按鈕,輸入“gpedit.msc”,打開(kāi)“本地組策略編輯器”。
在“計(jì)算機(jī)配置”→“管理模版”→“系統(tǒng)”→“用戶配置文件”中,將“在用戶注銷(xiāo)時(shí)不要強(qiáng)制卸載用戶注冊(cè)表”設(shè)置為“已啟用”。

下面就是設(shè)置防火墻的策略了,這個(gè)我嫌麻煩,干脆把防火墻關(guān)閉了。



接下來(lái)打開(kāi)“注冊(cè)表編輯器”

在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下面創(chuàng)建一個(gè) DWORD(32-位)值。

設(shè)置 LocalAccountTokenFilterPolicy 值 1。

按 Ctrl + F,搜索 “{76A64158-CB41-11D1-8B02-00600806D9B6}”,右鍵選擇“權(quán)限”,需要注意的是,它在 HKEY_CLASSES_ROOT\CLSID 下。

點(diǎn)擊“高級(jí)”

切換到“所有者”頁(yè)簽,將“當(dāng)前所有者”修改為“Administrators”組。

再切換到“權(quán)限”頁(yè)簽,選擇“Administrators”組,點(diǎn)擊“編輯”按鈕,修改成“完全控制”。

再把“所有者”切換回“TrustedInstaller”(NT Service\TrustedInstaller)

注冊(cè)表都設(shè)置好以后,最好注銷(xiāo)再登錄一下,讓注冊(cè)表生效。
在“計(jì)算機(jī)管理”的“服務(wù)”中,找到“Remote Registry ”服務(wù)。

啟動(dòng)它,并設(shè)置啟動(dòng)類(lèi)型為“自動(dòng)”。

現(xiàn)在重新在Jenkins頁(yè)面上點(diǎn)擊“Launch slave agent”按鈕。

看到已經(jīng)成功連接的提示

回到首頁(yè),可以看到Win7的系統(tǒng)已經(jīng)就緒。

創(chuàng)建類(lèi)Unix系統(tǒng)(Linux,OSX等)的奴隸節(jié)點(diǎn)
對(duì)于類(lèi)Unix系統(tǒng),創(chuàng)建節(jié)點(diǎn)就要簡(jiǎn)單許多,一般默認(rèn)都安裝了SSH的服務(wù),我們的計(jì)劃是讓Jenkins通過(guò)SSH來(lái)登錄并管理奴隸節(jié)點(diǎn)。但通過(guò)用戶名和密碼訪問(wèn)SSH不是一個(gè)特別好的方式,我們可以配置通過(guò)私鑰的方式來(lái)登錄SSH。
比如我們以一臺(tái)CentOS系統(tǒng)的虛擬機(jī)為例,假設(shè)IP為172.16.12.82。我們先在上面創(chuàng)建一個(gè)用于登錄的用戶jenkins。然后登錄到這個(gè)用戶。
生成一個(gè)密鑰對(duì)(這中間會(huì)有幾次詢問(wèn),都直接輸入回車(chē))。
- [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 ~]$
現(xiàn)在可以看到在jenkins用戶的家目錄下的 .ssh 目錄下創(chuàng)建了兩個(gè)密鑰:公鑰 id_rsa.pub 和私鑰 id_rsa。
- [jenkins@svr82 ~]$ ls -l ~/.ssh/
- 總計(jì) 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
現(xiàn)在將公鑰添加到這臺(tái)主機(jī)的 authorized_keys 文件中,并修改權(quán)限為600
- [jenkins@svr82 .ssh]$ pwd
- /home/jenkins/.ssh
- [jenkins@svr82 .ssh]$ cat id_rsa.pub >> authorized_keys
- [jenkins@svr82 .ssh]$ chmod 600 authorized_keys
現(xiàn)在 id_rsa 和 id_rsa.pub 這兩個(gè)文件不是必須要保留的這臺(tái)服務(wù)器上,但你要保存好 id_rsa 因?yàn)檫@個(gè)是訪問(wèn)此服務(wù)器的私鑰。
還有一點(diǎn)需要特別注意的是假如你的 ~/.ssh 目錄是自己手動(dòng)創(chuàng)建的,或者 id_rsa 從其他地方拷貝來(lái)的,如果此時(shí)發(fā)現(xiàn)無(wú)法通過(guò)私鑰進(jìn)行 ssh 連接時(shí),請(qǐng)檢查下面文件/目錄的權(quán)限是否和我列出的一樣。
- [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的頁(yè)面上,我們先來(lái)配置一下訪問(wèn)這個(gè)服務(wù)器的“Credential”,在Jenkins頁(yè)面的左側(cè)快捷欄中點(diǎn)擊“Credentials”


這里面有個(gè)憑據(jù)域的概念,其實(shí)他的目的就是,假如我們配置了很多登錄服務(wù)器的憑據(jù),通過(guò)各個(gè)域來(lái)分類(lèi)整理這些憑據(jù),比如所有訪問(wèn)服務(wù)器A的憑據(jù)都在一個(gè)域里這種情況。我們目前暫時(shí)先不創(chuàng)建域,直接選擇默認(rèn)的“Global credentials”,點(diǎn)擊左側(cè)的“Add Credentials”添加訪問(wèn)服務(wù)器的憑據(jù)。

在“Kind”里,我們選擇“SSH Username with private key”;“Username”這里輸入登錄上面服務(wù)器的用戶名“jenkins”;“Private Key”這里選擇“Enter directly”,輸入內(nèi)容就是上面步驟里創(chuàng)建的 id_rsa 文件內(nèi)容。

下面在這臺(tái)CentOS服務(wù)器上裝好JDK,準(zhǔn)備工作基本上完成了。
- [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的“系統(tǒng)管理”→ “管理節(jié)點(diǎn)”中點(diǎn)擊“新建節(jié)點(diǎn)”,填寫(xiě)內(nèi)容和之前創(chuàng)建Windows節(jié)點(diǎn)類(lèi)似。

在“Launch method”中選擇“Launch slave agents on Unix machines via SSH”;“Credentials”這里選擇我們剛剛創(chuàng)建的憑據(jù)。
特別要注意的是“JVM Options”這里,“-Djava.awt.headless=true”不是每個(gè)類(lèi)Unix系統(tǒng)都必須輸入,但我發(fā)現(xiàn)在蘋(píng)果的OSX系統(tǒng)中不設(shè)置會(huì)報(bào)錯(cuò)誤“Can't connect to window server - not enough permissions.”。

連接成功!

現(xiàn)在我們有兩個(gè)可以用的奴隸節(jié)點(diǎn)了:

posted on 2014-02-18 14:09 順其自然EVO 閱讀(5674) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 持續(xù)集成