分布式部署可以理解为jenkins的分布式部署工作空间,通过将构建过程分配到从属slave结点上从而减轻master节点的压力,同时可以同时构建多个,有点类似负载均衡的概念。
建议:所有Linux或者Windows机器的环境路径统一(如:JDK、Maven),安装位置和jenkins所在服务器的JDK和maven必须一致,也就是说jenkins所在服务器和各个节点服务器中的JDK和Maven目录和文件名都是一样的。以便于管理、不容易出现问题。
也只是建议,比如windows和linux系统就不可能做到一样,所以,只是建议,可以通过配置节点服务器属性找到jdk,maven工具位置。
前提条件是你已经安装了jenkins工具,一般建议使得war方式安装。
我的master使用windows系统,slave节点使用centos7系统。
系统管理->节点管理->新建节点->编辑节点名称,选择固定节点即可,即可编辑节点属性
至些slave配置完成,刚配置完成显示连接不成功,这时候进入节点状态页,点击启动代理即可
新建一个名字是TestSlave的job,新建过程这里不讲。进入配置页,在General那栏,选中限制项目的运行节点,然后将上面创建的slave填写进去即可。
这种方式比较适合slave节点是linux系统,稳定,不太适合slave节点是windows系统的,如果你强制使用的话,那么虽然认证成功,但还是失败,比如
ERROR: null
java.util.concurrent.CancellationException
at java.util.concurrent.FutureTask.report(FutureTask.java:121)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:902)
at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:293)
at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[01/25/19 14:40:16] Launch failed - cleaning up connection
[01/25/19 14:40:16] [SSH] 连接关闭。
SSHLauncher{host='192.168.1.244', port=22, credentialsId='fe06086d-a534-4800-88b0-abee4f66fe35', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=210, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true}
[01/25/19 14:40:16] [SSH] Opening SSH connection to 192.168.1.244:22.
[01/25/19 14:40:16] [SSH] WARNING: SSH Host Keys are not being verified. Man-in-the-middle attacks may be possible against this connection.
[01/25/19 14:40:17] [SSH] 认证成功。
[01/25/19 14:40:17] [SSH] The remote user's environment is:
???????? 1 ? cmdlet Set-Variable
?????????:
上面启动方式选择了Launch slave agents via SSh,这种方式在linux上比较稳定。
在windows上启动方式适合选择Launch agent via Java Web Start。默认没有Launch agent via Java Web Start。按如下方式打开
系统管理->全局安全配置->代理项的JNLP代理协议的TCP端口选择指定端口,填写端口9595,因为master机器是有防为墙的,除非关闭防火墙,否则不能选择随机选取项。
插件管理项选中,结果如下
这样配置即可打开Launch agent via Java Web Start选项。
配置方式和上面的一样,除了启动方式适合选择Launch agent via Java Web Start。
点击Launch,下载文件为slave-agent.jnlp,使用文件打开文件,如果ip是127.0.0.1或localhost则替换成slave机器能访问到ip,毕竟slave节点要连接master节点。
将slave-agent.jnlp拷贝到slave机器上,双击运行直到出现下图表示连成成功
连接成功后
可以点击File,找到Install as a service,将slave安装成windows服务
大功告成。在master查看slave节点的最终结果如下图
这种方式适用windows,不安全
多半也帐户问题,我刚配置也出现这个问题,后面也不知道为什么就好了,百度了一圈没找到解决办法。应该是用了帐户就行了,重现不了,所以没办法解答。
参考
jenkins集群测试环境原理、部署及常见问题解决
Jenkins 主备master-slave模式搭建