2014-07-14 14 views
18

website for the plugin nói rằng bạn có thể tạo tập lệnh groovy để chạy để xác định danh sách tham số.jenkins mở rộng tham số plugin groovy script

cách này được giải quyết như thế nào? Các hướng dẫn không nói bất cứ điều gì.

  1. Trong bối cảnh kịch bản nào chạy?
  2. Tôi phải quay lại từ kịch bản gì?
  3. Thư mục nào là kịch bản lệnh? nó có phải là biến môi trường WORKSPACE không?
  4. có thêm một trường được gọi là variable bindings. Điều này được sử dụng như thế nào?
+2

đơn giản nhất Groovy one-liner: 'trở lại [ "item1", "ITEM2", " vv"]' – MarkHu

+0

đã thử với đề xuất ở trên nhưng luôn có một trường trống. thực sự khi sử dụng "tập lệnh groovy" trong vùng văn bản, tôi luôn có kết quả trống. – dawez

+0

Đã xảy ra sự cố tương tự. Đi tới 'http: // : /scriptApproval /' và phê duyệt mục nhập Classpath '/' – vehovmar

Trả lời

19

tôi phải thâm nhập vào mã nguồn để tìm ra câu trả lời cho những câu hỏi này vì vậy tôi hy vọng điều này sẽ giúp mọi người khác.

1. Trong bối cảnh kịch bản nào chạy?

Tập lệnh được chạy bên trong groovy.lang.GroovyShell. Lớp này hiện đang ở trong thư viện Groovy 1.8.5. đây là một đoạn trích từ mã:

// line 419 - 443 of the ExtendedChoiceParamaterDefinition 
else if(!StringUtils.isBlank(groovyScript)) { 
    try { 
     GroovyShell groovyShell = new GroovyShell(); 
     setBindings(groovyShell, bindings); 
     Object groovyValue = groovyShell.evaluate(groovyScript); 
     String processedGroovyValue = processGroovyValue(isDefault, groovyValue); 
     return processedGroovyValue; 
    } 
    catch(Exception e) { 

    } 
} 
else if(!StringUtils.isBlank(groovyScriptFile)) { 
    try { 
     GroovyShell groovyShell = new GroovyShell(); 
     setBindings(groovyShell, bindings); 
     groovyScript = Util.loadFile(new File(groovyScriptFile)); 
     Object groovyValue = groovyShell.evaluate(groovyScript); 
     String processedGroovyValue = processGroovyValue(isDefault, groovyValue); 
     return processedGroovyValue; 
    } 
    catch(Exception e) { 

    } 
} 

2. Tôi phải quay lại từ kịch bản gì?

Như đoạn mã trên cho thấy, tập lệnh sẽ trả về một chuỗi với bất kỳ dấu phân cách nào bạn đã chỉ định trong paramater hoặc mảng String []. đây là một đoạn chức năng mà xử lý giá trị trả về từ các tập lệnh:

// line 450 - 465 of ExtendedChoiceParameterDefinition 
private String processGroovyValue(boolean isDefault, Object groovyValue) { 
    String value = null; 
    if(groovyValue instanceof String[]) { 
     String[] groovyValues = (String[])groovyValue; 
     if(!isDefault) { 
      value = StringUtils.join((String[])groovyValue, multiSelectDelimiter); 
     } 
     else if(groovyValues.length > 0) { 
      value = groovyValues[0]; 
     } 
    } 
    else if(groovyValue instanceof String) { 
     value = (String)groovyValue; 
    } 
    return value; 
} 

3. thư mục là gì cwd của kịch bản? nó có phải là biến môi trường WORKSPACE không?

Có quan trọng không? Bạn có thể truy cập vào biến môi trường không gian làm việc từ bên trong kịch bản sử dụng

Map<String, String> props = System.getenv(); 
def currentDir = props.get('WORKSPACE'); 

4. có trường bổ sung được gọi là ràng buộc biến. Điều này được sử dụng như thế nào?

Đây là tệp thuộc tính được định dạng tệp giá trị = giá trị. các tên này sau đó có thể được giải quyết trong tập lệnh groovy.

e.g. 
    key1=foo 
    prop2=bar 
+0

Xin lỗi, nhưng kịch bản lệnh được đặt ở đâu?Tôi đang cố gắng để làm cho công việc này từ một Pipeline Jenkinsfile và cho đến nay tôi để nó làm việc bằng cách đặt văn bản của nội tuyến kịch bản, như là một biến trong Jenkinsfile. Nó dường như không hoạt động khi tôi cố gắng tải định nghĩa của tham số từ một kịch bản bên ngoài. – Mig82

+0

Vui lòng thêm ví dụ về đường ống sử dụng plugin này với tập lệnh –

0

Đối tượng json phân tích cú pháp (từ parametres) để Groovy đối tượng - Parsing and producing JSON

import groovy.json.JsonSlurper 
def jsonSlurper = new JsonSlurper() 
def object = jsonSlurper.parseText('{ "myList": [4, 8, 15, 16, 23, 42] }') 
println(object.myList) 
Các vấn đề liên quan