20170815

问题描述

  • jenkins需要使用jave web start的方式connect slave
  • jenkins启动在virtualBox虚拟机的docker容器中
  • 而slave在启动虚拟的localhost上
  • 在localhost中执行java -jar slave.jar -jnlpUrl http://IP:port/computer/computeName/slave-agent.jnlp -secret bf817270767fe0dbe26b257ccc42cb2147b2b659edd44088da7d3bf09c149ef4
  • 却始终没有办法connect到localhost这个节点,并且该节点始终显示disconnect

思路

  • Q1:为什么不能connect到localhost节点?
  • A1:如果想要知道为什么不能,那么就必须要知道出了什么错误,因此,我们重新再localhost执行了java -jar指令。发现打印出了err msg:SEVERE: [JNLP4-connect connection to localhost/127.0.0.1:50000] javax.net.ssl.SSLHandshakeException: General SSLEngine problem;SEVERE: The server rejected the connection: None of the protocols were accepted发现在是在链接50000端口的时候出现了异常,并且是javax.net.ssl.SSLHandshakeException: General SSLEngine problem

  • Q2:那么为什么作为slave链接master node需要链接50000端口?
  • A2:那么要解决这个问题就必须要查询官网。查询jenkins docker发现范例中基本都暴露50000端口。并且发现在配置中出现了这样的名词:JENKINS_SLAVE_AGENT_PORT,因此可以jenkins容器启动的时候,jenkins服务会默认启动在8080端口,但是jenkins-slave-agent服务会启动在50000端口

  • Q3:那么50000端口的服务有什么作用,当50000端口没有暴露出来的时候会爆出上面的错误?
  • A3:首先看到报错中说是跟JNP4文件中的协议有关,并且还爆出了ssl异常,因此可以确定,这种错误跟安全性有关,也就意味着50000端口可以检验slave节点是否可以连接master host

  • Q4:此时jenkins暴露了50000端口,为什么还是没有办法连接到服务?

  • A4:这时候就要了解整个jave web start注册slave的流程了。

    • 首先jenkins容器在配置好了slave节点的时候产生了一个文件(slave.jar)还有一串秘钥。
    • 任何一个节点,想要链接master node,必须执行down 下 slave.jarjava -jar slave.jar -jnlpUrl http://IP:port/computer/computeName/slave-agent.jnlp -secret bf817270767fe0dbe26b257ccc42cb2147b2b659edd44088da7d3bf09c149ef4
      以上就是通过向jenkins所在的服务器发送请求,获取并执行.jnlp
    • 在.jnlp脚本中需要到jenkins给出的50000端口注册当前的slave

    因此我们可以判断出来应该是在当前的slave没有办法连接到这个slave agent service,检查发现vagrant没有将jenkins容器暴露出来的50000端口暴露给localhost,导致localhost没有办法注册slave


  • Q5:为什么现在要改成java web service
  • A5:首先先讨论java web service方式的优点:
    • master节点不需要主动链接slave,每个slave只需要通过获取jar文件然后得知秘钥执行指令就可以向master发送连接请求,在这之前,master都不需要知道那些节点想要链接他
    • 链接起来十分方便一条指令就可以完成
    • 而且不需要像ssh这些方式,具有很多不安全性

反思

  • 1.老师让我使用java web service的方式进行slave connect,我并没与尝试询问为什么使用这个方式,而是在不理解原因,和工作原理情况下,按照网上的文档强行将demo写出来
  • 2.看到错误的log信息,不够仔细,导致没有立刻就找到没有暴露50000是导致错误的原因

action

  • 1.对于老师给出的方式和新概念,当下没有问题是因为不懂,但是开始动手之前输出使用新知识的:
    what 和 why
  • 2.每次出现bug,必须从第一个bug开始前三行开始读,必须保证在搜索之前清楚错误的意思。

你可能感兴趣的:(20170815)