2013-01-11 37 views
14

Gần đây, chúng tôi đã nâng cấp Jenkins lên verion mới nhất.Sự cố khi khởi chạy tác nhân phụ slave qua Java Web Bắt đầu trên Jenkins

và kể từ đó ive không thể khởi động nô lệ qua Java WebStart thông qua dòng lệnh mỗi khi cố gắng khởi động nó tôi nhận được "Không thể khởi động các ứng dụng" lỗi

với điều này trong bảng điều khiển chi tiết

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) 

Khi thử duyệt đến trang web Jenkins và ăn trưa từ đó, HOẠT ĐỘNG Tuy nhiên nếu bạn khởi động lại hộp thì dòng lệnh khi khởi động không thực hiện được công việc.

Đây là lệnh Tôi cố gắng để chạy từ nô lệ

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

Vấn đề là điều này đã từng làm việc. Tôi cũng đã thử cập nhật lên phiên bản Java mới nhất nhưng không may mắn,

Bất kỳ ý tưởng nào?

+0

Điều gì sẽ xảy ra khi bạn thử liên kết đó trực tiếp từ trình duyệt? Nội dung của tệp JNLP là gì? –

+0

Nút "khởi chạy" hoạt động từ trình duyệt trên slave cụ thể đó nhưng không thông qua dòng lệnh –

+0

có hoạt động wget (hoặc tương đương) cho url đó không? – radai

Trả lời

15

Giả sử là, do ở hầu hết các phần để bài viết trên các diễn đàn Jenkins, hành vi mới này là do một sửa chữa cho một vấn đề an ninh: https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013-01-04

Hai giải pháp dường như sắp tới:

  1. Tải về tệp JNLP (thông qua trình duyệt, wget, curl, bất cứ điều gì), sau đó chạy cục bộ - có thể yêu cầu tham số bổ sung.
  2. Đi tới Quản lý Jenkins -> Định cấu hình bảo mật toàn cầu và trong Chiến lược ủy quyền ma trận dựa trên dự án, bật “kết nối” trong phần “nô lệ”, cho người dùng “Ẩn danh”. Điều này sẽ khiến bạn mở cửa để tấn công nơi ai đó mô phỏng nô lệ (nhưng trong trường hợp của tôi, trên một mạng làm việc riêng - đó không phải là vấn đề.)
+0

Yup đó là nó, Cảm ơn sự giúp đỡ của bạn. –

+0

Bạn có thể xây dựng trên giải pháp đầu tiên không. các thông số tôi cần phải vượt qua là gì. Tôi không thể tìm thấy bất kỳ tài liệu nào về nó – Shiva

+0

chỉ cần kích hoạt tệp jnlp với lệnh javaws như 'javaws slave-agent.jnlp', không có tham số cần thiết cho giải pháp đầu tiên (đây là trong trường hợp của tôi: Tôi đã sai url trong jenkins. tệp model.JenkinsLocationConfiguration.xml). – Shiva

8

Nếu bạn muốn để tệp JNLP trên máy chủ và bạn không muốn mở lỗ hổng bảo mật cho người dùng Anonymous để kết nối như một nô lệ, chỉnh sửa các tập tin Jenkins-slave.xml để thêm tùy chọn -jnlpCredentials cùng với tùy chọn -jnlpUrl:

-jnlpCredentials {user}:{apiKey} 

nơi:
người dùng là tên người dùng trong cơ sở dữ liệu tài khoản của Jenkins
apiKey là khóa API của người dùng (lưu ý đây KHÔNG phải là của người dùng mật khẩu)

Để có được khóa API cho người sử dụng, đi vào:

http://SERVER/user/USER/configure 

và nhấp vào nút để hiển thị khóa API của người dùng đó.

+1

Cuối cùng giải pháp cho một vấn đề tương tự, trong đó nô lệ jenkins không bắt đầu qua jnlp, với lỗi: 'Không có được slave-agent.jnlp? Encryption = true Invalid byte 1 của chuỗi UTF-8 1 byte –

0

Kiểm tra xem tên Slave1 trong commandline và Jenkins nút defenition là same.It nên Slave1 trong Jenkins cũng

1

nút Đối với tôi, tôi phải chắc chắn rằng tôi đã "vô danh" Kết nối thiết trong ma trận Jenkins quyền VÀ tôi đã phải hack các tập tin JNLP được gửi xuống từ chủ.

Tôi có thể nói đây là lỗi trong Jenkins trong 2.19.2. Về cơ bản, trong tệp JNLP được kéo xuống từ máy chủ, đối số đường hầm có chứa ip và cổng của chủ được thay thế bằng chỉ IP-addr phụ.

Xem mã cho engine.java, [dòng # 308] là nơi mà các ngoại lệ được ném từ:

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

Exception trông giống như: enter image description here

Nguyên tập tin JNLP của tôi trông giống như:

<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> 

Vấn đề là "-tunnel" arg ở trên. Nó chỉ chứa ip-addr của máy SLAVE. Thay đổi điều này thành ip-add AND PORT của máy MASTER, đã sửa nó! Bên dưới:

<argument>-tunnel</argument> 
    <argument>jenkins-master-ip-addr:9080</argument> 
Các vấn đề liên quan