Как импортировать и запускать расширение DSL стороннего плагина Jenkins (githubPullRequest) с помощью инструмента Gradle локально?

Я новичок в сценариях Jenkins job-dsl.

Я работаю над преобразованием XML-конфигурации Jenkins в скрипт Groovy DSL с помощью плагина (https://github.com/AOEpeople/gradle-jenkins-job-dsl-plugin), который использует инструмент Gradle для создания скрипта и локального запуска модульного теста.

Однако в настоящее время я столкнулся с проблемой расширения DSL из стороннего плагина Jenkins (https://github.com/jenkinsci/ghprb-plugin).

triggers {
    githubPullRequest {
         orgWhitelist("Test")
         cron("H/5 * * * *")
         extensions {
             commitStatus {
                 completedStatus('SUCCESS', 'Build succeeded.')
                 completedStatus('FAILURE', 'Build failed.')
             }
         }
     }
}

Сценарий не может быть сгенерирован Gradle из-за проблемы:

Expected no exception to be thrown, but got 'javaposse.jobdsl.dsl.DslScriptException'
at spock.lang.Specification.noExceptionThrown(Specification.java:119)
at com.aoe.gradle.jenkinsjobdsl.JobScriptsSpec.test DSL script #file.name(JobScriptsSpec.groovy:55)
Caused by: javaposse.jobdsl.dsl.DslScriptException: (PullRequestJobTemplate.groovy, line 59) No signature of method: static org.apache.commons.lang.ClassUtils.isAssignable() is applicable for argument types: ([Ljava.lang.Class;, [Ljava.lang.Class;, java.lang.Boolean) values: [[class com.unified.dsl.templates.PullRequestJobTemplate$_closure1$_closure5$_closure15], ...]
Possible solutions: isAssignable([Ljava.lang.Class;, [Ljava.lang.Class;), isAssignable(java.lang.Class, java.lang.Class)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScriptEngine(AbstractDslScriptLoader.groovy:107)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScripts_closure1(AbstractDslScriptLoader.groovy:60)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScripts(AbstractDslScriptLoader.groovy:46)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScript(AbstractDslScriptLoader.groovy:81)
at com.aoe.gradle.jenkinsjobdsl.JobScriptsSpec.test DSL script #file.name(JobScriptsSpec.groovy:51)
Caused by: groovy.lang.MissingMethodException: No signature of method: static org.apache.commons.lang.ClassUtils.isAssignable() is applicable for argument types: ([Ljava.lang.Class;, [Ljava.lang.Class;, java.lang.Boolean) values: [[class com.unified.dsl.templates.PullRequestJobTemplate$_closure1$_closure5$_closure15], ...]
Possible solutions: isAssignable([Ljava.lang.Class;, [Ljava.lang.Class;), isAssignable(java.lang.Class, java.lang.Class)
at javaposse.jobdsl.plugin.ExtensionPointHelper.findExtensionPoints_closure1(ExtensionPointHelper.groovy:24)
at javaposse.jobdsl.plugin.ExtensionPointHelper.findExtensionPoints(ExtensionPointHelper.groovy:23)
at javaposse.jobdsl.plugin.JenkinsJobManagement.callExtension(JenkinsJobManagement.java:365)
at javaposse.jobdsl.dsl.AbstractExtensibleContext.methodMissing(AbstractExtensibleContext.groovy:17)
at com.unified.dsl.templates.PullRequestJobTemplate.closure1$_closure5(PullRequestJobTemplate.groovy:59)
at com.unified.dsl.templates.PullRequestJobTemplate.closure1$_closure5(PullRequestJobTemplate.groovy)
at javaposse.jobdsl.dsl.ContextHelper.executeInContext(ContextHelper.groovy:16)
at javaposse.jobdsl.dsl.Job.triggers(Job.groovy:568)
at com.unified.dsl.templates.PullRequestJobTemplate$_closure1.doCall(PullRequestJobTemplate.groovy:58)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at groovy.lang.Closure.call(Closure.java:430)
at javaposse.jobdsl.dsl.JobParent.processItem(JobParent.groovy:114)
at javaposse.jobdsl.dsl.JobParent.freeStyleJob(JobParent.groovy:47)
at com.unified.dsl.base.JobBuilder.build(JobBuilder.groovy:52)
at stage.script.run(script:12)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScript(AbstractDslScriptLoader.groovy:124)
at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScriptEngine(AbstractDslScriptLoader.groovy:101)
... 6 more

person Tin Nguyen    schedule 23.10.2017    source источник
comment
Вам нужно добавить плагин в файл сборки Gradle.   -  person Rob Kielty    schedule 24.10.2017
comment
@RobKielty ты знаешь, как это добавить? Я также пытаюсь выяснить, как импортировать плагин (github.com/jenkinsci/ghprb-plugin) в файл build.gradle. Пожалуйста, дайте мне руководство, если у вас есть. Спасибо   -  person Tin Nguyen    schedule 24.10.2017
comment
Я только что попробовал с jenkinsPlugin 'org.jenkins-ci.plugins:ghprb:1.39.0' Скачать jcenter.bintray.com/org/jenkins-ci/plugins/ghprb/1.39.0/ Скачать jcenter.bintray.com/com/coravy/hudson/plugins /github/github/ Я вижу, что он работает хорошо, и загружаю плагин на локальный сервер. Тем не менее, все еще есть та же проблема.   -  person Tin Nguyen    schedule 24.10.2017
comment
Глядя на это сейчас. Надеюсь ответ последует   -  person Rob Kielty    schedule 25.10.2017
comment
Вы показываете строку 59 сценария PullRequestJobTemplate.groovy в своем вопросе? Вот где проблема.   -  person Rob Kielty    schedule 25.10.2017
comment
Добавил ответ. Ты почти у цели! Добавьте зависимости плагина, и я бы сказал, что ваш тест будет запущен. Если это не сработает, добавьте свой файл сборки к вопросу, и я посмотрю на это снова завтра. По Гринвичу уже поздно Удачи!   -  person Rob Kielty    schedule 25.10.2017
comment
привет @RobKielty. Я уже видел строку 59 в своем вопросе, это строка, использующая githubPullRequest. Позвольте мне проверить ваш ответ и вернуться к вам. Спасибо за вашу поддержку здесь   -  person Tin Nguyen    schedule 25.10.2017


Ответы (1)


Таким образом, трассировка стека, которую вы получаете, генерируется тестом Спока, который проверяет, компилируется ли сценарий job-dsl. Итак, вы правильно настроили среду разработки! Всегда хорошее начало.

Теперь все, что вам нужно сделать, это настроить локальную среду выполнения Jenkins, чтобы разрешить создание файла конфигурации Jenkins XML, когда он запускается Spock Test.

Просматривая ваш сценарий job-dsl, я должен сказать, что он мне нравится. В частности, я сравнил его с полным образцом job-dsl на домашней странице плагина GitHub для создания запросов на вытягивание...

https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin#GitHubpullrequestbuilderplugin-JobDSLSupport

Ключевой частью трассировки стека является вот эта строка

PullRequestJobTemplate.groovy, line 59) No signature of method: 
static org.apache.commons.lang.ClassUtils.isAssignable() is applicable 
for argument types: ([Ljava.lang.Class;, [Ljava.lang.Class;, 
java.lang.Boolean) values: [[class com.unified.dsl.templates.PullRequestJobTemplate$_closure1$_closure5$_closure15], ...]

Для меня это означало бы, что по-прежнему отсутствует зависимость во время выполнения, позволяющая плагину job-dsl GH PR Builder работать должным образом.

При дальнейшем просмотре страницы плагина я отмечаю, что следующие зависимости являются обязательными и необязательными...

credentials (version:1.21) 
matrix-project (version:1.6) 
build-flow-plugin (version:0.12, optional) 
ssh-agent (version:1.3) 
structs (version:1.6) 
github (version:1.26.0) 
git (version:2.4.0) 
github-api (version:1.82) 
plain-credentials (version:1.1) 
job-dsl (version:1.39, optional) 
token-macro (version:1.10, optional)

Если вы добавите их в сборку Gradle, я бы сказал, что ваш XML будет сгенерирован.

Не забудьте добавить эти зависимости на целевой сервер Jenkins после завершения разработки job-dsl.

person Rob Kielty    schedule 24.10.2017
comment
Привет @Rob Kielty, я попытался добавить зависимости в файл сборки Gradle, я также вижу загрузку Gradle при запуске команды ./gradlew build. Тем не менее, проблема все еще существует. - person Tin Nguyen; 25.10.2017
comment
Кроме того, только что узнал, что другие спрашивали на сайте плагина github github.com/janinko/ghprb/issues/ 411 - person Tin Nguyen; 25.10.2017
comment
Хорошая работа Тин. Если у вас все зависимости настроены правильно, но вы по-прежнему сталкиваетесь с таким поведением, вам следует опубликовать сообщение в группах пользователей плагина job-dsl и gh pr и посмотреть, смогут ли Даниэль или сопровождающие GH определить это как ошибку. - person Rob Kielty; 25.10.2017
comment
Если вы можете поделиться своим кодом, я попытаюсь воспроизвести проблему и помочь в дальнейшем. - person Rob Kielty; 25.10.2017
comment
Наконец, я сделал макет, чтобы решить проблему (см. решение на github.com/janinko/ghprb/issues/411). Я думаю, что dsl-job не позволяет использовать расширение dsl из плагина Jenkins на Spock Test. Надеюсь, они скоро поддержат в следующий раз. - person Tin Nguyen; 25.10.2017
comment
Спасибо за вашу поддержку, Роб. - person Tin Nguyen; 25.10.2017