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
đơn giản nhất Groovy one-liner: 'trở lại [ "item1", "ITEM2", " vv"]' – MarkHu
đã 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
Đã xảy ra sự cố tương tự. Đi tới 'http: //: /scriptApproval /' và phê duyệt mục nhập Classpath '/' –
vehovmar