Jenkins是master-slave/agent结构,可以通过代理把任务下发到各个agent/slave上去执行

如图,首先在master上开启代理配置,指定master上开启的tcp端口,以及和slave进行通信的代理协议

然后就可以创建新的节点(node)。只有上面开启了代理配置,这里的“启动方式”才会出现“通过Java Web启动代理”的选项

在某个slave机器上,主动建立和master的连接,点击里面的“Launch”按钮就可以下载文件slave-agent.jnlp,通过txt打开,可以看到里面的各种启动信息,包括密钥。

另外一种启动方式如下:

这里的remoting-3.33.jar和上面的agent.jar都是代理的jar包,仓库源码是: https://github.com/jenkinsci/remoting

这里的test就是上面配置从节点的名字,要保持一致

java -Dorg.jenkinsci.remoting.engine.JnlpProtocol3.disabled=true -cp target/remoting-3.33.jar hudson.remoting.jnlp.Main -headless -url http://127.0.0.1:6060/ 775369839f50faddcae785239ac85ab09274afa3bc5a77b0d45a63794ea74597 test

slave-agent.jnlp的内容如下

<jnlp codebase="http://127.0.0.1:6060/computer/test/" spec="1.0+">
<information>
<title>Agent for test</title>
<vendor>Jenkins project</vendor>
<homepage href="https://jenkins-ci.org/"/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/><jar href="http://127.0.0.1:6060/jnlpJars/remoting.jar"/>
</resources>
<application-desc main-class="hudson.remoting.jnlp.Main">
<argument>6824195ad033f0c52d3235e0da0aced40578d1908a5f21be9636b91ac19f1972</argument>
<argument>test</argument>
<argument>-workDir</argument>
<argument>.jenkins/test</argument>
<argument>-internalDir</argument>
<argument>remoting</argument>
<argument>-url</argument>
<argument>http://127.0.0.1:6060/</argument>
</application-desc>
</jnlp>

常见错误

  1. 连接时使用的名字不一致导致:jenkins的master上配置的节点名字要和slave上连接时使用的名字一致

  2. 认证失败,查看密钥方法见上文

谈下jenkinde插件kubernetes-plugin的实现原理

代码

主要是利用了上面的jnlp原理:

1、在全局配置里配置k8s信息,其中包括k8s地址,连接k8s的证书信息,k8s的命名空间namespace(创建slave/agent的地方),jenkins地址,k8s的pod节点配置模版等信息

2、监控jenkins的作业/任务Job排队情况,动态增加/减少slave/agent的数量

3、作业繁忙时,首先在Jenkins上创建从节点,拿到从节点的名字和密钥等信息

4、最后根据k8s的配置,远程调用k8s的创建pod,即slave/agent

slave/agent只是个代理,执行任务时,需要的jar包,都会从master上传输过来

Java Web Start即Java Network Launching Protocol (JNLP)

如何调试slave/agent?

jenkins的slave/agent如何通过tcp端口和master建立连接的更多相关文章

  1. TCP 3次握手建立连接

      TCP 3次握手建立连接 1. (Client) –> [SYN] –> (Server) 假如Client和Server通讯. 当Client要和Server通信时,Client首先 ...

  2. TCP/IP协议的建立连接与关闭连接过程

    一.建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence ...

  3. tcp 三次握手建立连接难点总结

    所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号 ...

  4. TCP三次握手建立连接

    基本过程:       ISN(初始序号)随时间变化,每一个连接具有不同的ISN,防止在网络延迟中分组被重新发送.   请求端发送SYN(同步序号 )=1,seq=ISN(32bits序号,每4ms+ ...

  5. Zabbix系列之五——监控TCP端口

    监控端口的几个主要Keys: net.tcp.listen[port] Checks if this port is in LISTEN state. 0 - it is not, 1 - it is ...

  6. TCP的三次握手(建立连接)和四次挥手(关闭连接)

    参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...

  7. TCP的三次握手(建立连接)和四次挥手(关闭连接)(转)

    转自:(http://www.cnblogs.com/Jessy/p/3535612.html) 参照: http://course.ccniit.com/CSTD/Linux/reference/f ...

  8. 【转载】TCP的三次握手(建立连接)和四次挥手(关闭连接)

    建立连接: 理解:窗口和滑动窗口TCP的流量控制 TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包 ...

  9. C++写Socket——TCP篇(0)建立连接及双方传输数据

    满山的红叶--飘落之时-- 最近接触了点关于用C++写socket的东西,这里总结下. 这里主要是关于TCP的,TCP的特点什么的相关介绍在我另一篇博文里,所以这里直接动手吧. 我们先在windows ...

随机推荐

  1. vscode源码编译疑难问题

    最近把原来老的源码merge到了新的1.15版本源码,以前的依赖问题会导致各种错误,Loading "gc-signals" failed啦,Error: %1 is not a ...

  2. Python json常用操作

    json模块 (字符串操作) json.dumps() :对数据进行编码 json.loads() :对数据进行解码 json模块(文件操作) # 写入 JSON 数据 with open('data ...

  3. Tcl在Vivado中的应用

    转载: https://blog.csdn.net/avrmcu1/article/details/43446529?utm_source=blogxgwz6

  4. Linux文件权限符号说明

    为了控制权限,Linux首先对于将操作的用户分为:用户.用户组和其他,这三个概念. 每个文件都会属于某个用户,而一个用户可以属于多个用户组,而不属于该用户组的用户,则属于其他.因此,每个文件的操作权限 ...

  5. 项目 java.lang.NoClassDefFoundError 异常。

    项目部署之后调用接口失败:异常信息: NoClassDefFoundError ClassNotFoundException 注意这两种是有区别的. 具体转 https://www.cnblogs.c ...

  6. liunx系统下crontab定时启动Scrapy爬虫程序

    定时启动爬虫 # 查看命令得绝对路径 # which scrapy # cd到爬虫得项目目录下 + scrapy命令得绝对路径 + 启动命令 */5 * * * * cd /opt/mafengwo/ ...

  7. 深入理解WebRTC

    Web Real-Time Communication(Web实时通信,WebRTC)由一组标准.协议和JavaScript API组成,用于实现浏览器之间(端到端)的音频.视频及数据共享. WebR ...

  8. python3 各种编码转换

    在做CTF密码题时很大的坑点就在编码,中间有一个弄错就出不来结果.正好python在这块比较坑,记录一下.以下是各种需求对应的输出: 1. 字符串转16进制ascii码串: txt='ABC' new ...

  9. java之map遍历

    java开发中常常会用到遍历,所以下边就列举四种map的遍历方法. public class testMap { public static void main(String[] args) { Ma ...

  10. qt 添加本程序的注册表项

    QStringcmd; cmd.clear(); QStringapplication_path=QCoreApplication::applicationFilePath();//带文件扩展名的全路 ...