现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点。
进入“系统管理”中的“管理节点”。
[img]http://dl2.iteye.com/upload/attachment/0090/4255/1fd661dd-90f4-3a1f-9710-239cfbd665ca.png[/img]
[b][size=large]创建Windos系统的奴隶节点[/size][/b]
先创建一台安装了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路径,[b]特别注意,不能写成 java.exe[/b]。
[img]http://dl2.iteye.com/upload/attachment/0090/4257/dfe8cfca-7e54-3ecb-a2b3-2256384a4903.png[/img]
保存后,点击“Launch slave agent”按钮。看到下面的错误信息:
[img]http://dl2.iteye.com/upload/attachment/0090/4259/17939326-e19d-3846-9f03-73bac4fd7c69.png[/img]
别急,意料之中。在上个页面中你留意到有这么一个链接“subtle problems”,里面就是配置windows系统奴隶节点的常见问题。
[img]http://dl2.iteye.com/upload/attachment/0090/4261/a8c0d80b-995b-32da-bc9a-fae23523077f.png[/img]
我们回到Win7这台奴隶节点,按照链接里的内容好好修理修理它。
首选要保证这个用户是本地的“Administrator”组成员,如果你和我一样是在安装操作系统时创建的用户,这一条是满足的。
点击“开始”按钮,输入“gpedit.msc”,打开“本地组策略编辑器”。
在“计算机配置”→“管理模版”→“系统”→“用户配置文件”中,将“在用户注销时不要强制卸载用户注册表”设置为“已启用”。
[img]http://dl2.iteye.com/upload/attachment/0090/4263/c3a686c2-024c-3b77-be39-b9298767cfaf.png[/img]
下面就是设置防火墙的策略了,这个我嫌麻烦,干脆把防火墙关闭了。
[img]http://dl2.iteye.com/upload/attachment/0090/4265/d3e3776c-be5c-35dd-a625-82e50c362d50.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4267/a3ac7a91-2ec3-3af3-8004-f47d240f6e8b.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4269/5e4e8f29-8912-3d5d-ad16-9c4ea6d45fda.png[/img]
接下来打开“注册表编辑器”
[img]http://dl2.iteye.com/upload/attachment/0090/4271/9758f3d6-12d6-33c6-aeeb-6e5a7c1844da.png[/img]
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下面创建一个 DWORD(32-位)值。
[img]http://dl2.iteye.com/upload/attachment/0090/4273/42dce0e0-0b35-35b2-996c-230e09b71ce5.png[/img]
设置 LocalAccountTokenFilterPolicy 值 1。
[img]http://dl2.iteye.com/upload/attachment/0090/4275/df111033-3c5b-3309-a2de-0cc34f201718.png[/img]
按 Ctrl + F,搜索 “{76A64158-CB41-11D1-8B02-00600806D9B6}”,右键选择“权限”,需要注意的是,它在 HKEY_CLASSES_ROOT\CLSID 下。
[img]http://dl2.iteye.com/upload/attachment/0090/4277/08355da5-5e78-357f-a3f9-b6ba6b2f75aa.png[/img]
点击“高级”
[img]http://dl2.iteye.com/upload/attachment/0090/4279/de510ab9-d307-321d-8abc-5f44db9192fa.png[/img]
切换到“所有者”页签,将“当前所有者”修改为“Administrators”组。
[img]http://dl2.iteye.com/upload/attachment/0090/4281/d45cf321-1782-35c6-b8e7-8c74d54646b7.png[/img]
再切换到“权限”页签,选择“Administrators”组,点击“编辑”按钮,修改成“完全控制”。
[img]http://dl2.iteye.com/upload/attachment/0090/4283/b1bff897-dffb-3c04-8a88-5a1d7f220b20.png[/img]
再把“所有者”切换回“TrustedInstaller”(NT Service\TrustedInstaller)
[img]http://dl2.iteye.com/upload/attachment/0090/4288/57e2a446-d762-3e25-bb10-891cd352e362.png[/img]
注册表都设置好以后,最好注销再登录一下,让注册表生效。
在“计算机管理”的“服务”中,找到“Remote Registry ”服务。
[img]http://dl2.iteye.com/upload/attachment/0090/4290/ec33a292-eeec-377a-8c36-185f54244719.png[/img]
启动它,并设置启动类型为“自动”。
[img]http://dl2.iteye.com/upload/attachment/0090/4292/d47937ec-85e2-3083-8aab-729afe9bf0a8.png[/img]
现在重新在Jenkins页面上点击“Launch slave agent”按钮。
[img]http://dl2.iteye.com/upload/attachment/0090/4294/3caeb8a8-6c52-3fca-b2a9-49c6212de5ac.png[/img]
看到已经成功连接的提示
[img]http://dl2.iteye.com/upload/attachment/0090/4296/af49549e-3f64-392e-90a4-0358dbc4480b.png[/img]
回到首页,可以看到Win7的系统已经就绪。
[img]http://dl2.iteye.com/upload/attachment/0090/4298/4aa2cedc-a900-3bfb-b260-59f0ac3e2402.png[/img]
[b][size=large]创建类Unix系统(Linux,OSX等)的奴隶节点[/size][/b]
对于类Unix系统,创建节点就要简单许多,一般默认都安装了SSH的服务,我们的计划是让Jenkins通过SSH来登录并管理奴隶节点。但通过用户名和密码访问SSH不是一个特别好的方式,我们可以配置通过私钥的方式来登录SSH。
比如我们以一台CentOS系统的虚拟机为例,假设IP为172.16.12.82。我们先在上面创建一个用于登录的用户jenkins。然后登录到这个用户。
[code="java"]
# useradd jenkins
# su - jenkins
[jenkins@svr82 ~]$
[/code]
生成一个密钥对(这中间会有几次询问,都直接输入回车)。
现在可以看到在jenkins用户的家目录下的 .ssh 目录下创建了两个密钥:公钥 id_rsa.pub 和私钥 id_rsa。
现在将公钥添加到这台主机的 authorized_keys 文件中,并修改权限为600
现在 id_rsa 和 id_rsa.pub 这两个文件不是必须要保留的这台服务器上,但你要保存好 id_rsa 因为这个是访问此服务器的私钥。
还有一点需要特别注意的是假如你的 ~/.ssh 目录是自己手动创建的,或者 id_rsa 从其他地方拷贝来的,如果此时发现无法通过私钥进行 ssh 连接时,请检查下面文件/目录的权限是否和我列出的一样。
回到Jenkis的页面上,我们先来配置一下访问这个服务器的“Credential”,在Jenkins页面的左侧快捷栏中点击“Credentials”
[img]http://dl2.iteye.com/upload/attachment/0090/4300/8058c71f-404a-305a-b11a-e81f9057ce06.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4304/8336e70d-bfd8-3350-a8c6-a0dcae0ba528.png[/img]
这里面有个凭据域的概念,其实他的目的就是,假如我们配置了很多登录服务器的凭据,通过各个域来分类整理这些凭据,比如所有访问服务器A的凭据都在一个域里这种情况。我们目前暂时先不创建域,直接选择默认的“Global credentials”,点击左侧的“Add Credentials”添加访问服务器的凭据。
[img]http://dl2.iteye.com/upload/attachment/0090/4306/55af460c-1e13-318e-a7e1-6d0b762d46ff.png[/img]
在“Kind”里,我们选择“SSH Username with private key”;“Username”这里输入登录上面服务器的用户名“jenkins”;“Private Key”这里选择“Enter directly”,输入内容就是上面步骤里创建的 id_rsa 文件内容。
[img]http://dl2.iteye.com/upload/attachment/0090/4308/8371cde9-9973-365f-ba13-5246134e9982.png[/img]
下面在这台CentOS服务器上装好JDK,准备工作基本上完成了。
[code="java"]
# 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)
[/code]
下面在Jenkins的“系统管理”→ “管理节点”中点击“新建节点”,填写内容和之前创建Windows节点类似。
[img]http://dl2.iteye.com/upload/attachment/0090/4310/0190e8ed-19f1-3771-9c7d-fbe38cdba06c.png[/img]
在“Launch method”中选择“Launch slave agents on Unix machines via SSH”;“Credentials”这里选择我们刚刚创建的凭据。
[b]特别要注意的是“JVM Options”这里,“-Djava.awt.headless=true”不是每个类Unix系统都必须输入,但我发现在苹果的OSX系统中不设置会报错误“Can't connect to window server - not enough permissions.”。[/b]
[img]http://dl2.iteye.com/upload/attachment/0090/4312/3eb28060-bc72-3ac7-9b5f-17efe0e9a3fc.png[/img]
连接成功!
[img]http://dl2.iteye.com/upload/attachment/0090/4314/1f91ad08-a611-3f46-bbb6-04f2c3d564cb.png[/img]
现在我们有两个可以用的奴隶节点了:
[img]http://dl2.iteye.com/upload/attachment/0090/4316/78ad266b-670e-3347-a826-55da83315c2e.png[/img]
进入“系统管理”中的“管理节点”。
[img]http://dl2.iteye.com/upload/attachment/0090/4255/1fd661dd-90f4-3a1f-9710-239cfbd665ca.png[/img]
[b][size=large]创建Windos系统的奴隶节点[/size][/b]
先创建一台安装了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路径,[b]特别注意,不能写成 java.exe[/b]。
[img]http://dl2.iteye.com/upload/attachment/0090/4257/dfe8cfca-7e54-3ecb-a2b3-2256384a4903.png[/img]
保存后,点击“Launch slave agent”按钮。看到下面的错误信息:
[img]http://dl2.iteye.com/upload/attachment/0090/4259/17939326-e19d-3846-9f03-73bac4fd7c69.png[/img]
别急,意料之中。在上个页面中你留意到有这么一个链接“subtle problems”,里面就是配置windows系统奴隶节点的常见问题。
[img]http://dl2.iteye.com/upload/attachment/0090/4261/a8c0d80b-995b-32da-bc9a-fae23523077f.png[/img]
我们回到Win7这台奴隶节点,按照链接里的内容好好修理修理它。
首选要保证这个用户是本地的“Administrator”组成员,如果你和我一样是在安装操作系统时创建的用户,这一条是满足的。
点击“开始”按钮,输入“gpedit.msc”,打开“本地组策略编辑器”。
在“计算机配置”→“管理模版”→“系统”→“用户配置文件”中,将“在用户注销时不要强制卸载用户注册表”设置为“已启用”。
[img]http://dl2.iteye.com/upload/attachment/0090/4263/c3a686c2-024c-3b77-be39-b9298767cfaf.png[/img]
下面就是设置防火墙的策略了,这个我嫌麻烦,干脆把防火墙关闭了。
[img]http://dl2.iteye.com/upload/attachment/0090/4265/d3e3776c-be5c-35dd-a625-82e50c362d50.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4267/a3ac7a91-2ec3-3af3-8004-f47d240f6e8b.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4269/5e4e8f29-8912-3d5d-ad16-9c4ea6d45fda.png[/img]
接下来打开“注册表编辑器”
[img]http://dl2.iteye.com/upload/attachment/0090/4271/9758f3d6-12d6-33c6-aeeb-6e5a7c1844da.png[/img]
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下面创建一个 DWORD(32-位)值。
[img]http://dl2.iteye.com/upload/attachment/0090/4273/42dce0e0-0b35-35b2-996c-230e09b71ce5.png[/img]
设置 LocalAccountTokenFilterPolicy 值 1。
[img]http://dl2.iteye.com/upload/attachment/0090/4275/df111033-3c5b-3309-a2de-0cc34f201718.png[/img]
按 Ctrl + F,搜索 “{76A64158-CB41-11D1-8B02-00600806D9B6}”,右键选择“权限”,需要注意的是,它在 HKEY_CLASSES_ROOT\CLSID 下。
[img]http://dl2.iteye.com/upload/attachment/0090/4277/08355da5-5e78-357f-a3f9-b6ba6b2f75aa.png[/img]
点击“高级”
[img]http://dl2.iteye.com/upload/attachment/0090/4279/de510ab9-d307-321d-8abc-5f44db9192fa.png[/img]
切换到“所有者”页签,将“当前所有者”修改为“Administrators”组。
[img]http://dl2.iteye.com/upload/attachment/0090/4281/d45cf321-1782-35c6-b8e7-8c74d54646b7.png[/img]
再切换到“权限”页签,选择“Administrators”组,点击“编辑”按钮,修改成“完全控制”。
[img]http://dl2.iteye.com/upload/attachment/0090/4283/b1bff897-dffb-3c04-8a88-5a1d7f220b20.png[/img]
再把“所有者”切换回“TrustedInstaller”(NT Service\TrustedInstaller)
[img]http://dl2.iteye.com/upload/attachment/0090/4288/57e2a446-d762-3e25-bb10-891cd352e362.png[/img]
注册表都设置好以后,最好注销再登录一下,让注册表生效。
在“计算机管理”的“服务”中,找到“Remote Registry ”服务。
[img]http://dl2.iteye.com/upload/attachment/0090/4290/ec33a292-eeec-377a-8c36-185f54244719.png[/img]
启动它,并设置启动类型为“自动”。
[img]http://dl2.iteye.com/upload/attachment/0090/4292/d47937ec-85e2-3083-8aab-729afe9bf0a8.png[/img]
现在重新在Jenkins页面上点击“Launch slave agent”按钮。
[img]http://dl2.iteye.com/upload/attachment/0090/4294/3caeb8a8-6c52-3fca-b2a9-49c6212de5ac.png[/img]
看到已经成功连接的提示
[img]http://dl2.iteye.com/upload/attachment/0090/4296/af49549e-3f64-392e-90a4-0358dbc4480b.png[/img]
回到首页,可以看到Win7的系统已经就绪。
[img]http://dl2.iteye.com/upload/attachment/0090/4298/4aa2cedc-a900-3bfb-b260-59f0ac3e2402.png[/img]
[b][size=large]创建类Unix系统(Linux,OSX等)的奴隶节点[/size][/b]
对于类Unix系统,创建节点就要简单许多,一般默认都安装了SSH的服务,我们的计划是让Jenkins通过SSH来登录并管理奴隶节点。但通过用户名和密码访问SSH不是一个特别好的方式,我们可以配置通过私钥的方式来登录SSH。
比如我们以一台CentOS系统的虚拟机为例,假设IP为172.16.12.82。我们先在上面创建一个用于登录的用户jenkins。然后登录到这个用户。
[code="java"]
# useradd jenkins
# su - jenkins
[jenkins@svr82 ~]$
[/code]
生成一个密钥对(这中间会有几次询问,都直接输入回车)。
[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”
[img]http://dl2.iteye.com/upload/attachment/0090/4300/8058c71f-404a-305a-b11a-e81f9057ce06.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0090/4304/8336e70d-bfd8-3350-a8c6-a0dcae0ba528.png[/img]
这里面有个凭据域的概念,其实他的目的就是,假如我们配置了很多登录服务器的凭据,通过各个域来分类整理这些凭据,比如所有访问服务器A的凭据都在一个域里这种情况。我们目前暂时先不创建域,直接选择默认的“Global credentials”,点击左侧的“Add Credentials”添加访问服务器的凭据。
[img]http://dl2.iteye.com/upload/attachment/0090/4306/55af460c-1e13-318e-a7e1-6d0b762d46ff.png[/img]
在“Kind”里,我们选择“SSH Username with private key”;“Username”这里输入登录上面服务器的用户名“jenkins”;“Private Key”这里选择“Enter directly”,输入内容就是上面步骤里创建的 id_rsa 文件内容。
[img]http://dl2.iteye.com/upload/attachment/0090/4308/8371cde9-9973-365f-ba13-5246134e9982.png[/img]
下面在这台CentOS服务器上装好JDK,准备工作基本上完成了。
[code="java"]
# 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)
[/code]
下面在Jenkins的“系统管理”→ “管理节点”中点击“新建节点”,填写内容和之前创建Windows节点类似。
[img]http://dl2.iteye.com/upload/attachment/0090/4310/0190e8ed-19f1-3771-9c7d-fbe38cdba06c.png[/img]
在“Launch method”中选择“Launch slave agents on Unix machines via SSH”;“Credentials”这里选择我们刚刚创建的凭据。
[b]特别要注意的是“JVM Options”这里,“-Djava.awt.headless=true”不是每个类Unix系统都必须输入,但我发现在苹果的OSX系统中不设置会报错误“Can't connect to window server - not enough permissions.”。[/b]
[img]http://dl2.iteye.com/upload/attachment/0090/4312/3eb28060-bc72-3ac7-9b5f-17efe0e9a3fc.png[/img]
连接成功!
[img]http://dl2.iteye.com/upload/attachment/0090/4314/1f91ad08-a611-3f46-bbb6-04f2c3d564cb.png[/img]
现在我们有两个可以用的奴隶节点了:
[img]http://dl2.iteye.com/upload/attachment/0090/4316/78ad266b-670e-3347-a826-55da83315c2e.png[/img]