-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
- macos
- JDK: openjdk 11.0.2 2019-01-15
- Jenkins versions tested: 2.235.5 and 2.271
- Plugins list as calculated using groovy script: https://github.com/ch007m/jenkins-job-dsl/blob/main/build.gradle#L243-L381
When I execute the following test `gradle test --tests MavenJobDSLTest` using this test project - https://github.com/ch007m/jenkins-job-dsl/blob/main/README.md which contains a Java Junit test (@Rule - Jenkinsrule)
package dev.snowdrop; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import javaposse.jobdsl.plugin.ExecuteDslScripts; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import java.util.ArrayList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class MavenJobDSLTest { @Rule public JenkinsRule j = new JenkinsRule(); @Test public void useMavenDSLGroovyFileAsJob() throws Exception { FreeStyleProject p = j.createFreeStyleProject(); p.scheduleBuild2(0).get(); // run a build to create a workspace p.getSomeWorkspace().child("mavenProject/mavenJob.groovy").copyFrom(getClass().getResourceAsStream("/mavenJob.groovy")); ExecuteDslScripts e = new ExecuteDslScripts(); e.setTargets("mavenProject/mavenJob.groovy"); p.getBuildersList().add(e); // Assert if build succeeded, if the Script executed includes the echo message FreeStyleBuild b = j.assertBuildStatusSuccess(p.scheduleBuild2(0).get()); b.keepLog(); assertEquals(2, b.number); assertEquals("#2",b.getDisplayName()); assertEquals("SUCCESS",b.getResult().toString()); // Check if the FreeStyleProject build reported that it generated the job: say-hello-world ArrayList LogResult = (ArrayList) b.getLog(100); //LogResult.forEach((s) -> System.out.println(s)); assertTrue(b.getLog(100).stream().anyMatch(str -> str.contains("GeneratedJob{name='say-hello-world'}"))); // Get the FreeStyleProject containing the Job DSL steps to be executed - Say Hello World FreeStyleProject freeStyleProjectGeneratedJob = (FreeStyleProject) j.jenkins.getItem("say-hello-world"); FreeStyleBuild b2 = freeStyleProjectGeneratedJob.scheduleBuild2(0).get(); assertEquals(1, b2.number); assertEquals("#1",b2.getDisplayName()); assertEquals("SUCCESS",b2.getResult().toString()); // Check if the FreeStyleProject build reported that it generated the job: say-hello-world assertTrue(b2.getLog(100).stream().anyMatch(str -> str.contains("Say Hello World !"))); /* Added for debugging and logging purposes ;) LogResult = (ArrayList) b2.getLog(100); LogResult.forEach((s) -> System.out.println(s)); System.out.println("//"); */ } }
and mavenJob.groovy
// See: https://www.happycoders.eu/devops/jenkins-tutorial-create-jobs-with-job-dsl/ mavenJob('mvn-spring-boot-rest-http') { description 'A Maven Job compiling the project Spring Boot Rest HTTP Example' parameters { gitParameter { name 'SELECTED_TAG' description 'The Git tag to checkout' type 'PT_TAG' defaultValue '2.3.4-2' branch '' branchFilter 'origin/(.*)' quickFilterEnabled false selectedValue 'DEFAULT' sortMode 'DESCENDING_SMART' tagFilter '*' useRepository '.*rest-http-example.git' listSize '10' } } scm { git { remote { url 'https://github.com/snowdrop/rest-http-example.git' // branch('$SELECTED_TAG') branch('2.3.4-2') } } } rootPOM 'pom.xml' goals 'clean install' }
and where the dependencies have been defined using the groovy scripts as defined within the README of the project
Jenkins.instance.pluginManager.plugins .findAll { !(it.shortName in ['job-dsl', 'structs']) } .collect { "testPlugins '${it.manifest.mainAttributes.getValue("Group-Id")}:${it.shortName}:${it.version}'" } .sort() .each { println it } and testCompile dependencies Jenkins.instance.pluginManager.plugins .findAll { !(it.shortName in ['job-dsl', 'structs']) } .collect { "testCompile '${it.manifest.mainAttributes.getValue("Group-Id")}:${it.shortName}:${it.version}@jar'" } .sort() .each { println it }
then we got a testing error
gradle test --tests MavenJobDSLTest > Task :test WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.thoughtworks.xstream.core.util.Fields (file:/Users/cmoullia/.gradle/caches/modules-2/files-2.1/org.jvnet.hudson/xstream/1.4.7-jenkins-1/161ed1603117c2d37b864f81a0d62f36cf7e958a/xstream-1.4.7-jenkins-1.jar) to field java.util.TreeMap.comparator WARNING: Please consider reporting this to the maintainers of com.thoughtworks.xstream.core.util.Fields WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future releasedev.snowdrop.MavenJobDSLTest > useMavenDSLGroovyFileAsJob FAILED org.jvnet.hudson.reactor.ReactorException at Reactor.java:282 Caused by: java.lang.Error at TaskMethodFinder.java:110 Caused by: java.lang.reflect.InvocationTargetException at NativeMethodAccessorImpl.java:-2 Caused by: java.lang.IllegalStateException at ExtensionList.java:4511 test completed, 1 failed
The report of the test reports the following error
org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282) at jenkins.InitReactorRunner.run(InitReactorRunner.java:50) at jenkins.model.Jenkins.executeReactor(Jenkins.java:1162) at jenkins.model.Jenkins.<init>(Jenkins.java:962) at hudson.model.Hudson.<init>(Hudson.java:85) at org.jvnet.hudson.test.JenkinsRule.newHudson(JenkinsRule.java:688) at org.jvnet.hudson.test.JenkinsRule.before(JenkinsRule.java:404) at org.jvnet.hudson.test.JenkinsRule$1.evaluate(JenkinsRule.java:595) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:288) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:282) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.Error: java.lang.reflect.InvocationTargetException at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110) at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1129) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ... 1 more Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 9 more Caused by: java.lang.IllegalStateException: Expected 1 instance of hudson.PluginManager$PluginUpdateMonitor but got 0 at hudson.ExtensionList.lookupSingleton(ExtensionList.java:451) at hudson.PluginManager$PluginUpdateMonitor.getInstance(PluginManager.java:2310) at hudson.maven.PluginImpl.init(PluginImpl.java:58) ... 14 more
and stderror
see gist: https://gist.github.com/cmoulliard/1a9d807dec9b068ab6889ec8afa48d2e
As a non maintainer, The ticket is great and detailed, but you really need to provide your environment. (JDK version, Plugins version, Jenkins version, etc)
"An illegal reflective access operation has occurred" code that isn't updated fully to jdk11 (well 9+), so try again with jdk 8 runtime?