Как я могу использовать плагин расширенного выбора параметров в конвейере Дженкинса script?

Плагин расширенного выбора параметров является отличным, и я использую его в заданиях, настроенных через пользовательский интерфейс https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin

Однако я изо всех сил пытаюсь заставить его работать в конвейере Jenkinsfile script. Похоже, что плагин расширенного выбора параметров еще не полностью совместим с сценариями Pipeline, поскольку генератор синтаксиса конвейера Jenkins создает следующий фрагмент:

parameters([<object of type com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition>])

Если я создаю параметры вручную, я получаю такое же поведение, как указано в https://issues.jenkins-ci.org/browse/JENKINS-32188

org.kohsuke.stapler.NoStaplerConstructorException: There no @DataBoundConstructor on any constructor of class 

Кто-нибудь знает какие-либо обходные пути, которые могут обойти проблему ExtendedChoiceParameterDefinition, не используя @DataBoundConstructor?

  • Дженкинс 2.19.2
  • Плагин расширенного выбора параметров 0.75

Ответ 1

Вот мой обходной путь для этого pb:

https://gist.github.com/jgraglia/44a7443847cff6f0d87387a46c7bb82f

то есть: вручную создать параметр, объявив все аргументы

Я смог добавить параметр multi checklist в свой конвейер с этим.

Ответ 2

Как и mkobit, в настоящий момент невозможно использовать плагин расширенного выбора в качестве параметра сборки.

То, что мне нравится использовать в качестве обходного пути, является конструкцией, подобной следующей

timeout(time: 5, unit: TimeUnit.MINUTES) {
    def result = input(message: 'Set some values', parameters: [
        booleanParam(defaultValue: true, description: '', name: 'SomeBoolean'),
        choice(choices: "Choice One\nChoice Two", description: '', name: 'SomeChoice'),
        stringParam(defaultValue: "Text", description: '', name: 'SomeText')
    ]) as Map<String, String>
}

echo "${result.SomeBoolean}, ${result.SomeChoice}, ${result.SomeText}"

И назовите его в начале моего конвейера. Затем вы получите запрос на эти вводы вскоре после начала сборки.

Ответ 3

Со 2 апреля 2019 года это стало возможным благодаря этой фиксации: https://github.com/jenkinsci/extended-choice-parameter-plugin/pull/25

Вы можете использовать это, например, так:

properties([
    parameters([
        extendedChoice( 
            name: 'PROJECT', 
            defaultValue: '', 
            description: 'Sélectionnez le projet à construire.', 
            type: 'PT_SINGLE_SELECT', 
            groovyScript: valueKeysScript,
            descriptionGroovyScript: valueNamesScript
        )
    ])
])

Если вы хотите знать все возможные параметры, вы должны обратиться к исходному коду. Если вы хотите узнать все возможные значения для клавиши "type", взгляните на константы PT_*.

Ответ 4

На самом деле я нашел ответ случайно: Построить после каждой фиксации (без веб-хостов)

node {
    properties([
        buildDiscarder(
            logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')), 
            parameters([
                    [$class: 'ExtensibleChoiceParameterDefinition', 
                        choiceListProvider: [
                           $class: 'TextareaChoiceListProvider', 
                           choiceListText: 'foo\nbar',
                           defaultChoice: 'bar',
                           addEditedValue: false,
                       ], 
                       description: 'blah blah blah blah', 
                       editable: true, 
                       name: 'choose_mnt'
                    ], 
                    booleanParam(defaultValue: false, description: '[TO DO]', name: 'include_installers')
                ]), 
                pipelineTriggers([])
            ])

    stage('Do Work') {
        print("-----------------------------------")
        print("Build ID: ${currentBuild.id}")
        sh 'date'
        sh 'pwd'
    }
}