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?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM