zoukankan      html  css  js  c++  java
  • jenkins的slave/agent如何通过tcp端口和master建立连接

    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?

  • 相关阅读:
    约瑟夫问题
    [bzoj] 2049 洞穴勘探 || LCT
    [bzoj] 1597 土地购买 || 斜率优化dp
    [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp
    [LNOI] 相逢是问候 || 扩展欧拉函数+线段树
    [bzoj] 1588 营业额统计 || Splay板子题
    [hdu] 5115 Dire Wolf || 区间dp
    [poj] 1651 Multiplication Puzzle || 区间dp
    [bzoj] 1090 字符串折叠 || 区间dp
    [bzoj] 1068 压缩 || 区间dp
  • 原文地址:https://www.cnblogs.com/shengulong/p/11373006.html
Copyright © 2011-2022 走看看