上面中的只有一个需要强调了,就是“Launch method”,我们这里选择的是 “Launch slave agent via java Web Start ”,这个方式建议在windows上使用最好。下面的介绍也是针对的这种launch模式的。
关于这个配置slave的详细步骤如果需要的话可以在这个地方找到详细的操作步骤:https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines (这个可以说是官方的最权限的guideline)。
这里推荐下:An easy way to control a Windows slave is by using Launch slave agents via Java Web Start (Recommended for Windows)
# Slave远程机器的配置细节
1,进入需要控制的远程机器上,一定要进入远程的slave机器,而不是你的master机器。输入对应的你的jenkins的地址,例如这里:
http://16.158.69.53:9999/jenkins/computer/
点击进入对应的该slave机器的图标进入:此时可能会报一些错误,不用管。
点击图中的launch按钮,他会提示你下载该文件slave-agent.jnlp.按照提示下载该文件,并保存在本地。我们这里需要确认两个问题是否存在:
问题一,确认slave-agent.jnlp 是用javaws来运行的,而不是java.exe 或者是javaw.exe来运行,因为一般的机器默认是采用java.exe启动的。我曾经因为这个问题折腾了好久。
问题二,将slave-agent.jnlp用notepad打开后,确认其中的URL是可用的Jenkins地址。其中的配置可能是这样的:
<jnlp spec="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>
确认其中的url地址是上面的正确的地址,而不是localhost,因为我的jenkins部署在本地测试。所以这里就遇到了显示localhost的地址问题。
之所以说这个是因为这个是jenkins的一个bug:http://stackoverflow.com/questions/11287845/jenkins-slave-cant-get-started
Jenkins does not use the "Jenkins URL" setting for a lot of things, but establishing connection with Java Web Start slaves is one of them, so please ensure "Jenkins URL" in the master configuration is set correctly.
以上的配置完成后,如果点击lanch按钮,可能会报一下的错误:
Slave irshost12.tc.tb.com
Connection was broken
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2252)
at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2545)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2555)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1294)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
at hudson.remoting.Command.readFrom(Command.java:92)
at hudson.remoting.ClassicCommandTransport.read(ClassicCommandTransport.java:72)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:48)
Connect slave to Jenkins one of these ways:
Launch agent from browser on slave
Run from slave command line:
javaws http://16.158.69.53:9999/jenkins/computer/irshost12.tc.com.com/slave-agent.jnlp
Or if the slave is headless:
java -jar slave.jar -jnlpUrl http://16.158.69.53:9999/jenkins/computer/irshost12.tc.com/slave-agent.jnlp
Download the JNLP file (via browser, wget, curl, whatever) then run locally - may require extra parameters.
Go to Manage Jenkins -> Configure Global Security, and under Project-based Matrix Authorization Strategy, enable “connect” in the “slave” section, for user “Anonymous”. This would leave you open to attack where someone emulates a slave (but in my case, on a private work network - that's not an issue.)
具体操作是进入jenkins主界面,然后进入Manage Jenkins -> Configure Global Security ,勾选其中的anonymous用户的slave部分的权限。如下: