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開始前三行開始讀,必須保證在搜索之前清楚錯誤的意思。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容