#jenkins #jenkins-pipeline
#Дженкинс #Дженкинс-конвейер
Вопрос:
Я пытаюсь выполнить уже определенное задание, используя метод сборки с конвейером Дженкинса. Это простой пример:
build('jenkins-test-project-build', param1 : 'some-value')
Но когда я пытаюсь его выполнить, я получаю сообщение об ошибке:
java.lang.IllegalArgumentException: Expected named arguments but got [{param1=some-value}, jenkins-test-project-build]
at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:442)
at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:380)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:156)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126)
...............
Ответ №1:
У вас есть несколько проблем при вызове сборки.
Во-первых, как упоминал шепель, вы должны назвать свои параметры, если у вас их несколько (вы можете забыть назвать его, только если используете только параметр по умолчанию job
, например build 'my-simple-job-without-params'
).
Вторая проблема заключается в том, что вы неправильно передаете параметры. Чтобы передать параметры нижестоящему заданию, вы должны использовать параметр с именем parameters
и предоставить ему массив объектов, которые определяют каждый из ваших параметров, например :
build job: 'jenkins-test-project-build', parameters: [[$class: 'StringParameterValue', name: 'param1', value: "some-value" ]]
Кроме того, обратите внимание, что скобки не являются обязательными при вызове метода Groovy.
Комментарии:
1. Да, действительно.. Я обнаружил эту проблему после решения первой: D Спасибо за ваш ответ
2. Мне пришлось использовать немного другой синтаксис, чтобы заставить передачу параметров работать на меня:
build job: 'jenkins-test-project-build', parameters: [string(name: 'param1', value:"some-value")]
3. Как мы можем передать параметр выбора
4. @RamakrishnaYelduti Если у вашего дочернего конвейера есть
choice
параметры, вы можете использоватьstring
аргумент в родительском конвейере.5. Кроме того, если необходимо передать несколько параметров, важна вложенность. Это выглядит так …. параметры: [[ … параметр …],[ … параметр …],[ … параметр …]]
Ответ №2:
Вы получаете эту ошибку, потому что вы не передали имя атрибута, который должен хранить ‘jenkins-test-project-build’.
В вашем случае вы должны передать атрибут задания.
build(job: 'jenkins-test-project-build', param1 : 'some-value')
Вот список доступных опций (конвейер-шаг сборки):
- задание
- параметры (необязательно)
- распространение (необязательно)
- Тихий период (необязательно)
- подождите (необязательно)
Комментарии:
1. Как @Zoodor говорит ниже, параметры должны быть описаны следующим образом:
build job: 'jenkins-test-project-build', parameters: [string(name: 'param1', value:"some-value"), string(name: 'param2', value:"some-value")]
Ответ №3:
Используйте генератор кода конвейера конкретного сервера jenkins для генерации кода, в моем случае это происходило из-за несоответствия версий, мы используем другую версию для разработки, а затем для производства, и каждый использовал другой синтаксис для вызова задания и передачи параметров.