I'm attempting to test some global pipeline libraries (https://jenkins.io/doc/book/pipeline/shared-libraries/) locally in a test Jenkins instance.
Previously, I had set up the Job DSL to create jobs and run each global library test in its own job. This is confusing and difficult to main for us, so I wanted to move these tests to be able to execute locally using the @JenkinsRule. I'm running into some complications which eventually seems to lead to different test results. It might be my setup, so was hoping I could get some advice or something around what I'm doing wrong or how to better dive into it. I'm guessing the slaves/plugins are started with a non-deterministic classpath (or possibly plugin loading causes problems) but I see errors like java.lang.NoSuchMethodError: org.jvnet.tiger_types.Types.bind(Ljava/lang/reflect/Type;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/ParameterizedType;)Ljava/lang/reflect/Type;. Anybody have any ideas? Some of build.gradle --- plugins { id 'groovy' id 'codenarc' } final String testsDir = 'test' ext['unitTestsDir'] = "${testsDir}/unit" ext['integrationTestsDir'] = "${testsDir}/integration" ext['groovyVersion'] = "2.4.11" sourceSets { main { groovy { // Jenkins Global Workflow Libraries requires sources to be at 'src' srcDirs = ['src'] } } test { groovy { // configure the test source set so that it is not part of the Global Pipeline Libraries srcDirs = ["${unitTestsDir}/src"] } } integrationTests { groovy { srcDirs = ["${integrationTestsDir}/src"] } resources { srcDirs = ["${integrationTestsDir}/resources"] } } functionalTests { groovy { srcDirs = [functionalTestsDir] } compileClasspath += sourceSets.main.compileClasspath + sourceSets.main.output runtimeClasspath += sourceSets.main.output } all { java { srcDirs = [] } } [main, test, functionalTests].each { configure(it) { resources { srcDirs = [] } } } } ext.jenkinsCoreVersion = "2.63" ext.jenkinsTestDependencies = [ "org.jenkins-ci.main:jenkins-test-harness:2.24", "org.jenkins-ci.main:jenkins-war:${ext.jenkinsCoreVersion}", "org.jenkins-ci.main:jenkins-war:${ext.jenkinsCoreVersion}:war-for-test@jar" ] ext.pluginArtifacts = [ "org.jenkins-ci.plugins:mercurial:1.61", "org.jenkins-ci.plugins:pam-auth:1.3", "org.jenkins-ci.plugins:script-security:1.29.1", "org.jenkins-ci.plugins:timestamper:1.8.8", "org.jenkins-ci.plugins:matrix-project:1.11", "org.jenkins-ci.plugins:windows-slaves:1.3.1", "org.jenkins-ci.plugins:github-api:1.86", "org.jenkins-ci.plugins:mailer:1.20", "org.jenkins-ci.plugins:ldap:1.16", "org.jenkins-ci.plugins.icon-shim:icon-shim:2.0.3", "org.jenkins-ci.plugins:matrix-auth:1.7", "org.jenkins-ci.plugins:subversion:2.9", "org.jenkins-ci.plugins:antisamy-markup-formatter:1.5", "org.jenkins-ci.plugins:pipeline-build-step:2.5.1", "org.jenkins-ci.plugins:external-monitor-job:1.7", "org.jenkins-ci.plugins:ant:1.5", "org.jenkins-ci.plugins:token-macro:2.1", "org.jenkins-ci.plugins:build-timeout:1.18", "org.jenkins-ci.plugins:cloudbees-folder:6.0.4", "org.jenkins-ci.plugins:credentials:2.1.14", "org.jenkins-ci.plugins:structs:1.9", "org.jenkins-ci.plugins:pipeline-input-step:2.7", "org.jenkins-ci.plugins:scm-api:2.1.1", "org.jenkins-ci.plugins:plain-credentials:1.4", "org.jenkins-ci.plugins:pipeline-stage-step:2.2", "org.jenkins-ci.plugins:credentials-binding:1.12", "org.jenkins-ci.plugins.pipeline-stage-view:pipeline-rest-api:2.8", "org.jenkins-ci.plugins:email-ext:2.58", "org.jenkins-ci.plugins:ssh-credentials:1.13", "io.jenkins.blueocean:blueocean-commons:1.1.4", "org.jenkins-ci.plugins:git-client:2.4.6", "org.jenkins-ci.plugins:ssh-agent:1.15", "org.jenkins-ci.plugins:mapdb-api:1.0.9.0", "org.jenkins-ci.plugins:git:3.3.2", "org.jenkins-ci.plugins:junit:1.20", "org.jenkins-ci.plugins.workflow:workflow-basic-steps:2.6", "org.jenkins-ci.ui:jquery-detached:1.2.1", "org.jenkins-ci.plugins:ws-cleanup:0.33", "org.jenkins-ci.plugins.workflow:workflow-api:2.18", "io.jenkins.blueocean:blueocean-github-pipeline:1.1.4", "org.jenkins-ci.plugins:pubsub-light:1.10", "com.coravy.hudson.plugins.github:github:1.27.0", "org.jenkins-ci.plugins.workflow:workflow-job:2.13", "org.jenkins-ci.plugins.workflow:workflow-aggregator:2.5", "org.jenkins-ci.ui:handlebars:1.1.1", "org.jenkins-ci.plugins.workflow:workflow-support:2.14", "org.jenkins-ci.ui:momentjs:1.1.1", "org.jenkins-ci.plugins.pipeline-stage-view:pipeline-stage-view:2.8", "org.jenkins-ci.plugins:ssh-slaves:1.20", "org.jenkins-ci.plugins:durable-task:1.14", "org.jenkins-ci.plugins.workflow:workflow-step-api:2.12", "org.jenkins-ci.ui:ace-editor:1.1", "org.jenkins-ci.plugins:javadoc:1.4", "org.jenkins-ci.plugins.workflow:workflow-scm-step:2.6", "io.jenkins.blueocean:blueocean-rest:1.1.4", "org.jenkins-ci.plugins.workflow:workflow-cps:2.36.1", "org.jenkins-ci.plugins:docker-commons:1.8", "org.jenkins-ci.plugins:git-server:1.7", "org.jenkins-ci.plugins.workflow:workflow-multibranch:2.16", "org.jenkins-ci.plugins.workflow:workflow-cps-global-lib:2.8", "org.jenkins-ci.plugins:branch-api:2.0.10", "org.jenkins-ci.plugins:bouncycastle-api:2.16.1", "org.jenkinsci.plugins:managed-scripts:1.3", "org.jenkins-ci.plugins.workflow:workflow-durable-task-step:2.12", "org.jenkins-ci.plugins:github-organization-folder:1.6", "org.jenkins-ci.plugins:github-branch-source:2.0.8", "org.jenkins-ci.plugins:authentication-tokens:1.3", "org.jenkins-ci.plugins:docker-workflow:1.12", "com.cloudbees.jenkins.plugins:docker-custom-build-environment:1.6.5", "org.jenkins-ci.plugins:promoted-builds:2.29", "org.jenkins-ci.plugins:htmlpublisher:1.14", "org.jenkins-ci.plugins:docker-build-step:1.43", "org.jenkins-ci.plugins:pipeline-utility-steps:1.3.0", "io.jenkins.blueocean:blueocean:1.1.4", "org.jenkins-ci.plugins:conditional-buildstep:1.3.6", "org.jenkins-ci.plugins:greenballs:1.15", "org.jenkins-ci.plugins:parameterized-trigger:2.35", "com.synopsys.arc.jenkinsci.plugins:job-restrictions:0.6", "org.jenkins-ci.plugins:cloudbees-bitbucket-branch-source:2.1.2", "com.sonyericsson.hudson.plugins.rebuild:rebuild:1.25", "org.jenkins-ci.main:maven-plugin:2.17", "org.jenkins-ci.plugins:multiple-scms:0.6", "org.jenkins-ci.plugins:copyartifact:1.38.1", "org.jenkins-ci.plugins:gatling:1.2.2", "org.jenkins-ci.plugins:jquery:1.11.2-0", "org.jenkins-ci.plugins:extended-choice-parameter:0.76", "org.jenkins-ci.plugins:run-condition:1.0", "org.jenkins-ci.plugins:flexible-publish:0.15.2", "io.jenkins.blueocean:blueocean-rest-impl:1.1.4", "io.jenkins.blueocean:blueocean-dashboard:1.1.4", "org.jenkins-ci.plugins:build-blocker-plugin:1.7.3", "org.jenkins-ci.plugins:config-file-provider:2.16.0", "org.jenkins-ci.plugins:build-name-setter:1.6.5", "org.jenkins-ci.plugins:ansicolor:0.5.0", "io.jenkins.blueocean:blueocean-web:1.1.4", "org.jenkinsci.plugins:pipeline-stage-tags-metadata:1.1.8", "io.jenkins.blueocean:blueocean-jwt:1.1.4", "org.jenkins-ci.plugins:blueocean-autofavorite:1.0.0", "org.jvnet.hudson.plugins:favorite:2.3.0", "org.jenkins-ci.plugins:throttle-concurrents:2.0.1", "io.jenkins.blueocean:blueocean-git-pipeline:1.1.4", "org.jenkins-ci.plugins:resource-disposer:0.6", "org.jenkins-ci.plugins:sse-gateway:1.15", "org.jenkinsci.plugins:pipeline-model-api:1.1.8", "io.jenkins.blueocean:blueocean-pipeline-api-impl:1.1.4", "org.jenkins-ci.plugins:pipeline-milestone-step:1.3.1", "io.jenkins.blueocean:blueocean-events:1.1.4", "org.jenkins-ci.plugins:stash-pullrequest-builder:1.7.0", "org.jenkinsci.plugins:pipeline-model-definition:1.1.8", "org.jenkins-ci.plugins:pipeline-github-lib:1.0", "org.jenkins-ci.plugins:blueocean-display-url:2.0", "org.jenkins-ci.plugins:variant:1.1", "io.jenkins.blueocean:blueocean-personalization:1.1.4", "org.6wind.jenkins:lockable-resources:2.0", "org.jenkins-ci.plugins:pipeline-graph-analysis:1.4", "io.jenkins.blueocean:blueocean-config:1.1.4", "org.jenkins-ci.plugins:job-dsl:1.64", "org.jenkins-ci.ui:bootstrap:1.3.2", "org.jenkinsci.plugins:pipeline-model-declarative-agent:1.1.1", "io.jenkins.blueocean:blueocean-i18n:1.1.4", "org.jenkins-ci.plugins:jackson2-api:2.7.3", "org.jenkins-ci.plugins:display-url-api:2.0", "io.jenkins.blueocean:blueocean-pipeline-editor:0.2.0", "org.jenkins-ci.plugins:docker-traceability:1.2", "io.jenkins.blueocean:blueocean-pipeline-scm-api:1.1.4", "org.jenkinsci.plugins:pipeline-model-extensions:1.1.8" ] dependencies { ivy group: 'org.apache.ivy', name: 'ivy', version: '2.4.0' implementation group: 'org.codehaus.groovy', name: 'groovy-all', version: groovyVersion testImplementation group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4' // We use a lower version of Guava to deal with Jenkins transitive dependency issues. // In https://github.com/google/guava/wiki/Release21 the MoreExecutors.sameThreadExecutor() was removed. // Jenkins relies on this method, so if use a Guava version that doesn't have it we get a java.lang.NoSuchMethodError // It is removed in 21 (https://github.com/google/guava/wiki/Release21), so we have to stay below it // See https://issues.jenkins-ci.org/browse/JENKINS-36779 for Jenkins issue regarding relocating the dependencies. testImplementation group: 'com.google.guava', name: 'guava', version: '20.0' testImplementation group: 'junit', name: 'junit', version: '4.12' final String slf4jVersion = '1.7.25' integrationTestsImplementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion integrationTestsImplementation group: 'org.slf4j', name: 'slf4j-simple', version: slf4jVersion // Dependency to get source code completion for the resource files integrationTestsCompileOnly(sourceSets.main.output) for (final jenkinsTest in project.ext.jenkinsTestDependencies) { integrationTestsImplementation(jenkinsTest) } for (final plugin in project.ext.pluginArtifacts) { integrationTestsImplementation(plugin) { dependency -> force = true artifact { name = dependency.name type = 'jar' } artifact { name = dependency.name type = 'hpi' } } } } final integrationTest = tasks.create('integrationTest', Test) { dependsOn('classes') mustRunAfter('test') group = LifecycleBasePlugin.VERIFICATION_GROUP final SourceSet integrationTestsSourceSet = sourceSets.getByName('integrationTests') testClassesDirs = integrationTestsSourceSet.output.classesDirs classpath = sourceSets.integrationTests.runtimeClasspath forkEvery = 1 // Filter the environment variables down so that they are not inherited from the Gradle process. // In Jenkins, it inherits all Git (and whatever else variables) environment = System.getenv().findAll { key, value -> // Allow keys to pass through if they are prefixed correctly or need to be passed through. // We will use these to do passthrough of credentials in some tests, and some Jenkins configurations also need to be passed through. // The SSH environment info, for instance, needs to be setup correctly based on how the 'sshagent' step configures the environment in a Jenkinsfile. key.startsWith('INTEGRATION_TEST') || key.startsWith('SSH_') } // set build directory for Jenkins test harness, JENKINS-26331 systemProperty('buildDirectory', project.buildDir.absolutePath) // Default is 3 minutes per test so we lower it to something easier to iterate with. systemProperty('jenkins.test.timeout', 60L) // Force any temporary files to be created inside the build directory. systemProperty('java.io.tmpdir', project.file("$buildDir/integrationTestTmp")) testLogging { lifecycle.events('started', 'skipped') } } --- Base Spock Specification package pipelineUtilities.testing import com.cloudbees.plugins.credentials.CredentialsScope import com.cloudbees.plugins.credentials.CredentialsStore import com.cloudbees.plugins.credentials.SystemCredentialsProvider import com.cloudbees.plugins.credentials.domains.Domain import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl import groovy.util.logging.Slf4j import jenkins.plugins.git.GitSCMSource import org.jenkinsci.plugins.workflow.libs.GlobalLibraries import org.jenkinsci.plugins.workflow.libs.LibraryConfiguration import org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever import org.junit.Rule import org.jvnet.hudson.test.JenkinsRule import spock.lang.Specification @Slf4j abstract class PipelineIntegrationBaseSpec extends Specification { @Rule JenkinsRule rule = new JenkinsRule() void setup() { configureSlaves() configureGlobalLibraries() configureCredentials() } private void configureCredentials() { if (Conditions.ARTIFACTORY_CREDENTIALS()) { log.debug('Artifactory credentials present, creating and adding them to @JenkinsRule') final Domain domain = Domain.global() final CredentialsStore store = rule.jenkins.getExtensionList(SystemCredentialsProvider.ProviderImpl) .first() .getStore(rule.jenkins) final UsernamePasswordCredentialsImpl artifactoryLogin = new UsernamePasswordCredentialsImpl( CredentialsScope.GLOBAL, 'Artifactory-UsernamePassword-ArtifactoryReadWrite', '', System.getenv('INTEGRATION_TEST_ARTIFACTORY_USERNAME'), System.getenv('INTEGRATION_TEST_ARTIFACTORY_PASSWORD') ) store.addCredentials(domain, artifactoryLogin) } } private void configureGlobalLibraries() { final SCMSourceRetriever retriever = new SCMSourceRetriever( new GitSCMSource( null, System.getProperty('user.dir'), '', 'local-source-code', // Fetch everything - if this is not used builds fail on Jenkins for some reason '*:refs/remotes/origin/*', '*', '', true ) ) final LibraryConfiguration localLibrary = new LibraryConfiguration('pipelineUtilities', retriever) localLibrary.implicit = true localLibrary.defaultVersion = 'git rev-parse HEAD'.execute().text.trim() localLibrary.allowVersionOverride = false GlobalLibraries.get().setLibraries(Collections.singletonList(localLibrary)) } private void configureSlaves() { rule.jenkins.numExecutors = 0 rule.jenkins.save() rule.createOnlineSlave() rule.createOnlineSlave() } } --- Sometimes running theseBuild log [Pipeline] withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline java.lang.NoSuchMethodError: org.jvnet.tiger_types.Types.bind(Ljava/lang/reflect/Type;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/ParameterizedType;)Ljava/lang/reflect/Type; at org.kohsuke.stapler.ClassDescriptor.findMethods(ClassDescriptor.java:173) at org.kohsuke.stapler.ClassDescriptor.findMethods(ClassDescriptor.java:147) at org.kohsuke.stapler.ClassDescriptor.<init>(ClassDescriptor.java:85) at org.jenkinsci.plugins.structs.describable.DescribableModel.<init>(DescribableModel.java:122) at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:166) at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372) at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463) at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365) at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:318) at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:259) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at groovy.lang.MetaClassImpl.invokeMethodOnGroovyObject(MetaClassImpl.java:1278) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1138) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:18) at com.mkobit.jenkins.pipelines.docker.DockerSupport.ensureImagePresent(/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/docker/DockerSupport.groovy:216) at com.mkobit.jenkins.pipelines.BaseScriptSupport.withScriptDelegate(file:/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/BaseScriptSupport.groovy:58) at com.mkobit.jenkins.pipelines.docker.DockerSupport.ensureImagePresent(/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/docker/DockerSupport.groovy:204) at com.mkobit.jenkins.pipelines.docker.DockerSupport.insideContainer(/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/docker/DockerSupport.groovy:162) at com.mkobit.jenkins.pipelines.BaseScriptSupport.withScriptDelegate(file:/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/BaseScriptSupport.groovy:58) at com.mkobit.jenkins.pipelines.docker.DockerSupport.insideContainer(/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/docker/DockerSupport.groovy:157) at com.mkobit.jenkins.pipelines.docker.DockerSupport.insideContainer(/var/lib/jenkins/workspace/utilities_git-dir-traversal-X6RAXJN7IA4NTXCT5HTZLDWF3EMB2AV4RCPAUH6BVTWESOYJ47RQ/build/integrationTestTmp/jenkinsTests.tmp/jenkins4639428473108692947test/jobs/project/builds/1/libs/pipelineUtilities/src/com/mkobit/jenkins/pipelines/docker/DockerSupport.groovy:74) at com.mkobit.jenkins.pipelines.docker.DockerSupportIntegrationSpec.WorkflowScript.run(WorkflowScript:8) at ___cps.transform___(Native Method) at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57) at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109) at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82) at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72) at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46) at com.cloudbees.groovy.cps.Next.step(Next.java:83) at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173) at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162) at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122) at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261) at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32) at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230) at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112) at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Finished: FAILURE ------ Expected: is <SUCCESS> but: was <FAILURE> at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) at org.junit.Assert.assertThat(Assert.java:956) at org.jvnet.hudson.test.JenkinsRule.assertBuildStatus(JenkinsRule.java:1157) at org.jvnet.hudson.test.JenkinsRule.assertBuildStatus(JenkinsRule.java:1163) at org.jvnet.hudson.test.JenkinsRule.assertBuildStatusSuccess(JenkinsRule.java:1192) at com.mkobit.jenkins.pipelines.docker.DockerSupportIntegrationSpec.Can run inside Docker Hub library image(DockerSupportIntegrationSpec.groovy:72) --- -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/a95469e2-3e42-4e44-8d44-5c04220c66f1%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.