2013-01-11 82 views
14

我們最近將Jenkins升級到了最新版本。通過Java Web啓動奴隸代理的問題在Jenkins上啓動

,自此香港專業教育學院沒有在細節面板能夠通過命令行每次我嘗試啓動它,我得到「無法啓動應用程序」的錯誤

推出通過Java Webstart的奴隸與此

CouldNotLoadArgumentException[ Could not load file/URL specified: http://MyServer:8080/computer/Slave1/slave-agent.jnlp] 
    at com.sun.javaws.Main.launchApp(Unknown Source) 
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source) 
    at com.sun.javaws.Main.access$000(Unknown Source) 
    at com.sun.javaws.Main$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

嘗試瀏覽Jenkins站點並從那裏啓動它然而,如果您然後重新啓動該框,那麼啓動時的命令行無法完成這項工作。

這是我試圖從從

cd "C:\Program Files (x86)\Java\jre7\bin" 
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp 

的問題是,這個曾經工作運行命令。 我也嘗試更新到最新版本的Java,但沒有運氣,

任何想法的人?

+0

當您嘗試從瀏覽器直接鏈接時會發生什麼?什麼是JNLP文件的內容? –

+0

「啓動」按鈕在該特定從屬設備上的瀏覽器上工作,但不通過命令行 –

+0

爲該URL創建wget(或等效)工作嗎? – radai

回答

15

據稱,由於在大多數情況下對詹金斯論壇上的帖子,這個新的行爲是由於對安全問題的修復程序:https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013-01-04

兩種解決方案似乎上來了:

  1. 下載JNLP文件(通過瀏覽器,wget,curl等等)然後在本地運行 - 可能需要額外的參數。
  2. 轉到管理詹金斯 - >配置全局安全性,並在基於項目的矩陣授權策略下,啓用用戶「匿名」的「從屬」部分中的「連接」。這會讓你打開攻擊的地方,有人模仿奴隸(但在我的情況下,在私人工作網絡 - 這不是問題)。
+0

是的,感謝您的幫助。 –

+0

您可否詳細說明第一個解決方案。我需要通過什麼參數。我無法找到任何文檔 – Shiva

+0

只需用javaws命令觸發jnlp文件,如'javaws slave-agent.jnlp',第一個解決方案不需要任何參數(這是我的情況:我在jenkins中有錯誤的url。 model.JenkinsLocationConfiguration.xml文件)。 – Shiva

8

如果你想離開JNLP文件的主人,你不想開這個安全漏洞的匿名用戶作爲從站連接,編輯詹金斯-slave.xml文件與-jnlpUrl選項一起添加-jnlpCredentials選項:

-jnlpCredentials {user}:{apiKey} 

其中:
用戶是Jenkins帳戶數據庫中的用戶名
apiKey是用戶的API密鑰(注意,這不是用戶的密碼)

要獲取用戶的API密鑰,進入:

http://SERVER/user/USER/configure 

並單擊該按鈕,顯示該用戶的API密鑰。

+1

最後一個解決類似問題的解決方法,jenkins從站無法通過jnlp啓動,出現錯誤:'無法獲得slave-agent.jnlp?encrypt = true 1字節UTF-8序列的無效字節1 –

0

檢查該名稱是否SLAVE1在命令行和詹金斯節點defenition是same.It應SLAVE1在詹金斯節點也

1

對於我來說,我必須確保我有「匿名」 Connect在詹金斯矩陣集權限和我不得不破解從主發送的JNLP文件。

我會說這是詹金斯在2.19.2中的錯誤。基本上,在從服務器上拉下來的JNLP文件中,包含主服務器的IP和端口的隧道參數只被替換爲從服務器ip-addr。

請參閱engine.java代碼,[行#308]這是其中的例外是從拋出:

https://searchcode.com/codesearch/view/65603521/

異常的樣子: enter image description here

本來我的JNLP文件看起來像:

<jnlp codebase="http://jenkins-master-ip-addr:8080/computer/Node1/" spec="1.0+"> 
<information> 
    <title>Agent for Node1</title> 
    <vendor>Jenkins project</vendor> 
    <homepage href="https://jenkins-ci.org/"/> 
</information> 
<security> 
    <all-permissions/> 
</security> 
<resources> 
    <j2se version="1.7+"/> 
    <jar href="http://jenkins-master-ip-addr:8080/jnlpJars/remoting.jar"/> 
    <property name="hudson.showWindowsServiceInstallLink" value="true"/> 
</resources> 
<application-desc main-class="hudson.remoting.jnlp.Main"> 

    <argument>b16fdf4388d98e4be6910218cfb5a9b5fa999bcd8dec90264e525171a3b02fce</argument> 
    <argument>Node1</argument> 

    <argument>-tunnel</argument> 
    <argument>jenkins-slave-ip-addr</argument> 

    <argument>-url</argument> 
    <argument>http://jenkins-master-ip-addr:8080/</argument> 

</application-desc> 

問題是上面的「-tunnel」參數。它僅包含SLAVE機器的ip-addr。改變這個主機的ip-add和端口,修復它!如下:

<argument>-tunnel</argument> 
    <argument>jenkins-master-ip-addr:9080</argument>