最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

jenkins - Builder pattern using Groovy classes in Gradle project (from example repos) results in missing class - Stack Overflow

programmeradmin5浏览0评论

I have been looking for a way to share values across multiple Jobs and I think I have found how to do this by creating Groovy classes that use a Builder pattern to create new Jobs. An example of this pattern can be seen here.

I have successfully setup a Gradle project and the Job DSL seed job to read my custom classes.

Here is my very basic class (a simple version of this):

package com.dsohub.jenkins.builder

import groovy.transform.builder.Builder
import groovy.transform.builder.SimpleStrategy
import javaposse.jobdsl.dsl.DslFactory
import javaposse.jobdsl.dsl.jobs.FreeStyleJob


@Builder(builderStrategy = SimpleStrategy, prefix = '')
class JobBuilder {
    String name
    String description

    FreeStyleJob build(DslFactory dslFactory) {
        dslFactory.job(name) {}
    }
}

I have tried using the javaposse.jobdsl.dsl.jobs.Job class and the javaposse.jobdsl.dsl.jobs.FreeStyleJob class, but no matter what I do here, I get the same result.

And here is my jobs/jobs.groovy script to create my Jenkins jobs:

import com.dsohub.jenkins.builder.JobBuilder

job('test') {                            // This is simple jobDsl syntax
    displayName('TEST')
}

new JobBuilder()                         // This is attempting to use the Builder class pattern
    .name('test-job-builder')
    .description('description')
    .build(this)                         // Removing this line, there is no error

Currently, when I run my seed job, I am getting the following stacktrace:

Processing DSL script jobs/jobs.groovy
FATAL: /codehaus/groovy/vmplugin/v8/IndyInterface
java.lang.ClassNotFoundException: .codehaus.groovy.vmplugin.v8.IndyInterface
    at java.base/java.URLClassLoader.findClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
Caused: java.lang.NoClassDefFoundError: /codehaus/groovy/vmplugin/v8/IndyInterface
    at com.dsohub.jenkins.builder.JobBuilder.build(JobBuilder.groovy:15)
    at com.dsohub.jenkins.builder.JobBuilder$build$1.call(Unknown Source)
    at .codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at .codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at .codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at jobs.run(jobs.groovy:11)
    at jobs$run.call(Unknown Source)
    at .codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at script$run.call(Unknown Source)
    at PluginClassLoader for job-dsl//javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScript(AbstractDslScriptLoader.groovy:138)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at .codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at .codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at .codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
    at .codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:64)
    at .codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:169)
    at PluginClassLoader for job-dsl//javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScriptEngine(AbstractDslScriptLoader.groovy:108)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at .codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at .codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:352)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at .codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:68)
    at .codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)
    at PluginClassLoader for job-dsl//javaposse.jobdsl.dsl.AbstractDslScriptLoader$_runScripts_closure1.doCall(AbstractDslScriptLoader.groovy:61)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at .codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at .codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at groovy.lang.Closure.call(Closure.java:420)
    at groovy.lang.Closure.call(Closure.java:436)
    at .codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2125)
    at .codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2110)
    at .codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2163)
    at .codehaus.groovy.runtime.dgm$165.invoke(Unknown Source)
    at .codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
    at .codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
    at .codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at .codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:58)
    at .codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at PluginClassLoader for job-dsl//javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScripts(AbstractDslScriptLoader.groovy:46)
    at PluginClassLoader for job-dsl//javaposse.jobdsl.plugin.ExecuteDslScripts.perform(ExecuteDslScripts.java:363)
    at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:80)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818)
    at hudson.model.Build$BuildExecution.build(Build.java:199)
    at hudson.model.Build$BuildExecution.doRun(Build.java:164)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:527)
    at hudson.model.Run.execute(Run.java:1833)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44)
    at hudson.model.ResourceController.execute(ResourceController.java:101)
    at hudson.model.Executor.run(Executor.java:446)
Finished: FAILURE

My question consists of 2 things.

1st of all, I'd like to know if this Builder pattern is still recommended, or if something else should be used.

It seems this method of creating jobs is not the best as you need to mess around with security settings since v1.60 ()

2nd, how do I get this method to work? I don't know why there is a missing class when called the build() method of the JobBuilder class? I always have the test job showing because it is created with standard JobDsl syntax, then I expect just that job when there is no build() method call, which I get, then I expect there to be 2 jobs when the build() is used, the normally defined test job and the test-job-builder job.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论