jenkinsci / jenkinsci/lockable-resources-plugin
[JENKINS-71232] NullPointerException when locking resources after upgrade
- Dominant language
- Java
- Stars
- 99
- Forks
- 205
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 8
Description
After upgrading from 1141.v7c5f8f31d2ee to 1156.v5e9f897ece02
the code
lock(resource: null, label: "PREFIX-${MATRIX_AXIS_NAME}", variable: "SELECTED_RES", quantity: 1) {
echo "Selected " + env.SELECTED_RES
}
causes NullPointerException:
[2023-05-09T16:08:47.535Z] java.lang.NullPointerException
[2023-05-09T16:08:47.535Z] at org.jenkins.plugins.lockableresources.LockStepExecution$1.expand(LockStepExecution.java:158)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.steps.EnvironmentExpander$MergedEnvironmentExpander.expand(EnvironmentExpander.java:112)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.steps.EnvironmentExpander.getEffectiveEnvironment(EnvironmentExpander.java:164)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:81)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:261)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:196)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:124)
[2023-05-09T16:08:47.535Z] at jdk.internal.reflect.GeneratedMethodAccessor551.invoke(Unknown Source)
[2023-05-09T16:08:47.535Z] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1225)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:41)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:180)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:163)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:178)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:182)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:152)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:152)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
[2023-05-09T16:08:47.535Z] at armPipeline.__model__Declaration_1_2096041320__(armPipeline.groovy:275)
[2023-05-09T16:08:47.535Z] at ___cps.transform___(Native Method)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:90)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:116)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:85)
[2023-05-09T16:08:47.535Z] at jdk.internal.reflect.GeneratedMethodAccessor505.invoke(Unknown Source)
[2023-05-09T16:08:47.535Z] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Next.step(Next.java:83)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:152)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:146)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:136)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:275)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:146)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:187)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:420)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:330)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:294)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[2023-05-09T16:08:47.535Z] at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
[2023-05-09T16:08:47.535Z] at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
[2023-05-09T16:08:47.535Z] at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
[2023-05-09T16:08:47.535Z] at jenkins.util.ErrorLoggingExecutorService.lambda$wrap$0(ErrorLoggingExecutorService.java:51)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.Thread.run(Thread.java:829)
downgrading the plugin resolves the issue
---
Originally reported by hcorg, imported from: NullPointerException when locking resources after upgrade
Raw content of original issue
After upgrading from 1141.v7c5f8f31d2ee to 1156.v5e9f897ece02
the code
lock(resource: null, label: "PREFIX-${MATRIX_AXIS_NAME}", variable: "SELECTED_RES", quantity: 1) {
echo "Selected " + env.SELECTED_RES
}causes NullPointerException:
[2023-05-09T16:08:47.535Z] java.lang.NullPointerException
[2023-05-09T16:08:47.535Z] at org.jenkins.plugins.lockableresources.LockStepExecution$1.expand(LockStepExecution.java:158)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.steps.EnvironmentExpander$MergedEnvironmentExpander.expand(EnvironmentExpander.java:112)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.steps.EnvironmentExpander.getEffectiveEnvironment(EnvironmentExpander.java:164)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:81)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:261)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:196)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:124)
[2023-05-09T16:08:47.535Z] at jdk.internal.reflect.GeneratedMethodAccessor551.invoke(Unknown Source)
[2023-05-09T16:08:47.535Z] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1225)
[2023-05-09T16:08:47.535Z] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:41)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:180)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:163)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:178)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:182)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:152)
[2023-05-09T16:08:47.535Z] at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:152)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
[2023-05-09T16:08:47.535Z] at armPipeline.__model__Declaration_1_2096041320__(armPipeline.groovy:275)
[2023-05-09T16:08:47.535Z] at ___cps.transform___(Native Method)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:90)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:116)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:85)
[2023-05-09T16:08:47.535Z] at jdk.internal.reflect.GeneratedMethodAccessor505.invoke(Unknown Source)
[2023-05-09T16:08:47.535Z] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Next.step(Next.java:83)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:152)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:146)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:136)
[2023-05-09T16:08:47.535Z] at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:275)
[2023-05-09T16:08:47.535Z] at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:146)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:187)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:420)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:330)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:294)
[2023-05-09T16:08:47.535Z] at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[2023-05-09T16:08:47.535Z] at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
[2023-05-09T16:08:47.535Z] at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
[2023-05-09T16:08:47.535Z] at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
[2023-05-09T16:08:47.535Z] at jenkins.util.ErrorLoggingExecutorService.lambda$wrap$0(ErrorLoggingExecutorService.java:51)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[2023-05-09T16:08:47.535Z] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[2023-05-09T16:08:47.535Z] at java.base/java.lang.Thread.run(Thread.java:829)downgrading the plugin resolves the issue
environment
```
Jenkins 2.404
Lockable Resources Plugin: 1156.v5e9f897ece02
```
Contributor guide
Research direction
Start with LockStepExecution.java at line 158 and reproduce the supplied lock pipeline after upgrading from 1141.v7c5f8f31d2ee to 1156.v5e9f897ece02. Compare the behavior with the downgraded plugin; done means the example no longer raises a NullPointerException while locking the resource and setting SELECTED_RES.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- groovy, java
- Domain
- ci-cd, devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 45/100