Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkinsfile Active Choice Parameter

How can I use this dsl script in Multibranch Pipeline Jenkinsfile (declarative)?

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
like image 575
georgihagi Avatar asked Sep 19 '25 04:09

georgihagi


2 Answers

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.

like image 95
Kalle Richter Avatar answered Sep 21 '25 02:09

Kalle Richter


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\']}'
                ]
            ]
        ]
    ])
])
like image 35
georgihagi Avatar answered Sep 21 '25 02:09

georgihagi