问题
How can i use this dsl script in Multibranch Pipeline jenkinsfile(declerative)?
parameters {
activeChoiceParam('States') {
description('Select a state option')
filterable()
choiceType('SINGLE_SELECT')
groovyScript {
script('["Sao Paulo", "Rio de Janeiro", "Parana:selected", "Acre"]')
fallbackScript('return ["ERROR"]')
}
}
activeChoiceReactiveParam('Cities') {
description('Active Choices Reactive parameter')
filterable()
choiceType('CHECKBOX')
groovyScript {
script('''
if (States.equals('Sao Paulo')) {
return ['Barretos', 'Sao Paulo', 'Itu'];
} else if (States.equals('Rio de Janeiro')) {
return ['Rio de Janeiro', 'Mangaratiba']
} else if (States.equals('Parana')) {
return ['Curitiba', 'Ponta Grossa']
} else if (States.equals('Acre')) {
return ['Rio Branco', 'Acrelandia']
} else {
return ['Unknown state']
}
''')
fallbackScript('return ["Script error!"]')
}
referencedParameter('States')
}
}
When i use this script in jenkinsfile i get this error:
WorkflowScript: 23: Build parameters definitions cannot have blocks @ line 23, column 5. activeChoiceParam('States') { ^
WorkflowScript: 32: Build parameters definitions cannot have blocks @ line 32, column 9. activeChoiceReactiveParam('Cities') { ^
2 errors
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:131)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:325)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE
回答1:
This error occurs when using the Active Choices Plugin in declarative Jenkinsfiles during Jenkins Domain-Specific-Language (DSL). This is not supported as stated by the developers.
This whole arrangement of plugins changeing ownership and leaving horribly outdated wiki pages full of spam leads to the danger of an immense waste of time while searching relevant information at dozens of places including "thank you"/"ping"-spammed comment sections.
回答2:
I solved that problem as follows:
properties([
parameters([
[$class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Select a choice', filterLength: 1, filterable: true, name: 'choice1', randomName: 'choice-parameter-7601235200970', script: [$class: 'GroovyScript', fallbackScript: [classpath: [], sandbox: false, script: 'return ["ERROR"]'], script: [classpath: [], sandbox: false, script: 'return[\'aaa\',\'bbb\']']]],
[$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Active Choices Reactive parameter', filterLength: 1, filterable: true, name: 'choice2', randomName: 'choice-parameter-7601237141171', referencedParameters: 'choice1', script: [$class: 'GroovyScript', fallbackScript: [classpath: [], sandbox: false, script: 'return ["error"]'], script: [classpath: [], sandbox: false, script: 'if(choice1.equals("aaa")){return [\'a\', \'b\']} else {return [\'aaaaaa\',\'fffffff\']}']]]
])
])
来源:https://stackoverflow.com/questions/53852261/jenkinsfile-active-choice-parameter