jenkinsci / jenkinsci/lockable-resources-plugin

[JENKINS-71232] NullPointerException when locking resources after upgrade

Open
#948 9 comments 0 reactions 0 assignees View on GitHub
component:lockable-resources-plugin imported-jira-issue priority:blocker regression resolution:unresolved Triage
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


  • status: Open
  • priority: Blocker
  • component(s): lockable-resources-plugin
  • label(s): regression
  • resolution: Unresolved
  • votes: 9
  • watchers: 12
  • imported: 20251217-081411

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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.