Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-55328

recordIssues and ScanForIssues in Pipeline get NPE Errors

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • warnings-ng-plugin
    • None
    • Jenkins Version - 2.150.1 LTS
    • warnings-ng 1.0.1

      Hello!

      When i use Android Lint or PMD in Declarative Pipeline, i get NPE.
      Freestyle Job working fine with Android Lint and PMD.

      This is my part of Pipeline: 

      recordIssues(
          enabledForFailure: true, 
          tools: [
              androidLint(pattern: '**/lint-results*.xml'), 
              checkStyle(pattern: '**/checkstyle*.xml'), 
              findBugs(pattern: '**/findbugs*.xml', useRankAsPriority: true) 
              pmd(pattern: '**/pmd*.xml')
          ]
      )
      

      This is received error:

      java.lang.NullPointerException
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:621)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:597)
          at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
          at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:51)
          at hudson.security.ACL.impersonate(ACL.java:290)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:48)
          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:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
      

      Actually, when i used scanForIssues, I've got another problem:

      java.lang.NullPointerException
          at io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:160)
          at io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:126)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:51)
          at hudson.security.ACL.impersonate(ACL.java:290)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:48)
          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:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
      

      Thank You!

          [JENKINS-55328] recordIssues and ScanForIssues in Pipeline get NPE Errors

          Ulli Hafner added a comment - - edited

          I added a meaningful exception if the symbol pmd is used and the PMD plugin is installed as well.

          Ulli Hafner added a comment - - edited I added a meaningful exception if the symbol pmd is used and the PMD plugin is installed as well.

          douglas knudsen added a comment - - edited

          I see this as resolved, but I'm getting this error with no PMD in use at all.   I have ALL PMD checks, old PMD plugin, and new recordIssues removed from my declarative Jekinsfile and see this right after the recordIssues step using androidLint is firing.  I do have all the old analysis plugins installed on Jenkins as well as the new WarningsNG plugin, I have to migrate, eh?  If this is not related to this change, I can cut a new issue.  I am using WarningsNG 1.0.1

           

          The step for recording AndroidLint report is the below and the report is generated in Jenkins too.

          recordIssues enabledForFailure: true, tools: [androidLint(pattern: 'Rewards/build/reports/lint-results*.xml')]

           
          Post stage
          [Pipeline] androidLint
          [android-lint] Collecting Android Lint files...
          [android-lint] Searching for all files in /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace that match the pattern Rewards/build/reports/lint-results*.xml
          [android-lint] Parsing 1 file in /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace
          [android-lint] Successfully parsed file /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace/Rewards/build/reports/lint-results-playStoreMockDebug.xml with 2 unique warnings and 0 duplicates.
          [Pipeline] recordIssues
          Error when executing always post condition:
          java.lang.IllegalArgumentException: No valid tool defined! You probably used the symbol 'pmd' in your tool definition. This symbol is also used in the PMD plugin. In this case you must use the symbol 'pmdParser' instead, see JENKINS-55328. The symbol 'pmd' can be used only if the PMD plugin is not installed.
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.ensureThatToolIsValid(IssuesRecorder.java:251)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:634)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:619)
          at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
          at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:51)
          at hudson.security.ACL.impersonate(ACL.java:290)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:48)
          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)

          [Pipeline] }

           

           

          UPDATED - I found through isolation that this is thrown from the androidLint tool in the recordIssues step

          recordIssues enabledForFailure: true, tools: [androidLint(pattern: 'Rewards/build/reports/lint-results*.xml')]

          douglas knudsen added a comment - - edited I see this as resolved, but I'm getting this error with no PMD in use at all.   I have ALL PMD checks, old PMD plugin, and new recordIssues removed from my declarative Jekinsfile and see this right after the recordIssues step using androidLint is firing.  I do have all the old analysis plugins installed on Jenkins as well as the new WarningsNG plugin, I have to migrate, eh?  If this is not related to this change, I can cut a new issue.  I am using WarningsNG 1.0.1   The step for recording AndroidLint report is the below and the report is generated in Jenkins too. recordIssues enabledForFailure: true, tools: [androidLint(pattern: 'Rewards/build/reports/lint-results*.xml')]   Post stage [Pipeline] androidLint [android-lint] Collecting Android Lint files... [android-lint] Searching for all files in /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace that match the pattern Rewards/build/reports/lint-results*.xml [android-lint] Parsing 1 file in /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace [android-lint] Successfully parsed file /Users/Shared/Jenkins/Home/jobs/mobileheros_multibranch/branches/feature-poc-.ujsndh.c-warnignsng/workspace/Rewards/build/reports/lint-results-playStoreMockDebug.xml with 2 unique warnings and 0 duplicates. [Pipeline] recordIssues Error when executing always post condition: java.lang.IllegalArgumentException: No valid tool defined! You probably used the symbol 'pmd' in your tool definition. This symbol is also used in the PMD plugin. In this case you must use the symbol 'pmdParser' instead, see JENKINS-55328 . The symbol 'pmd' can be used only if the PMD plugin is not installed. at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.ensureThatToolIsValid(IssuesRecorder.java:251) at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:634) at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:619) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:51) at hudson.security.ACL.impersonate(ACL.java:290) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:48) 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) [Pipeline] }     UPDATED - I found through isolation that this is thrown from the androidLint tool in the recordIssues step recordIssues enabledForFailure: true, tools: [androidLint(pattern: 'Rewards/build/reports/lint-results*.xml')]

          Ulli Hafner added a comment -

          I see, it seems that androidLint is also a keyword of the android lint plugin.

          Ulli Hafner added a comment - I see, it seems that androidLint is also a keyword of the android lint plugin.

          Ulli Hafner added a comment -

          Actually there is no way to prevent the exception so I resolved the issue. I can leave it open until JENKINS-55349 has been fixed, do you think that this would be better?

          However, as far as I understood the comment of jglick, a solution in workflow DSL to avoid that problem in general will be too complex to implement.

          Ulli Hafner added a comment - Actually there is no way to prevent the exception so I resolved the issue. I can leave it open until JENKINS-55349 has been fixed, do you think that this would be better? However, as far as I understood the comment of jglick , a solution in workflow DSL to avoid that problem in general will be too complex to implement.

          ah, yes...my other code branches here using the older Android Lint plugin also started failing.  So, short story is, migrate it now and have only the new NG plugin installed.  Something that is a larger pipeline issue beyond the scope of this plugin.  Thanks for the follow up!!

          douglas knudsen added a comment - ah, yes...my other code branches here using the older Android Lint plugin also started failing.  So, short story is, migrate it now and have only the new NG plugin installed.  Something that is a larger pipeline issue beyond the scope of this plugin.  Thanks for the follow up!!

          Ulli Hafner added a comment - - edited

          You still can use the old android plugin, then you need to use the class syntax:

          recordIssues tool: [$class: 'AndroidLint']
          

          I added an additional symbol for the next release: androidLintParser.

          Ulli Hafner added a comment - - edited You still can use the old android plugin, then you need to use the class syntax: recordIssues tool: [$class: 'AndroidLint' ] I added an additional symbol for the next release: androidLintParser .

          Jesse Glick added a comment -

          there is no way to prevent the exception

          WDYM? Fix the collision—rename or delete the symbol in one of the plugins. Maybe I am missing some context.

          Jesse Glick added a comment - there is no way to prevent the exception WDYM? Fix the collision—rename or delete the symbol in one of the plugins. Maybe I am missing some context.

          Ulli Hafner added a comment - - edited

          jglick I think it would be more helpful if the workflow engine would catch the exception and report the duplicate symbol. I don't have the context anymore, I need to guess which symbol is duplicate (I have 100 symbols). From null I don't see which is the duplicate symbol. In the workflow engine you should see what is wrong, or is that information not available? I think handing null to a describable is kind of error that should be detectable at the calling site.

          Ulli Hafner added a comment - - edited jglick I think it would be more helpful if the workflow engine would catch the exception and report the duplicate symbol. I don't have the context anymore, I need to guess which symbol is duplicate (I have 100 symbols). From null I don't see which is the duplicate symbol. In the workflow engine you should see what is wrong, or is that information not available? I think handing null to a describable is kind of error that should be detectable at the calling site.

          Jesse Glick added a comment -

          it would be more helpful if the workflow engine would catch the exception and report the duplicate symbol

          Right, that is JENKINS-55349.

          I need to guess which symbol is duplicate

          Sorry, my understanding of the issue was that the problematic symbol was known, or discoverable by having steps to reproduce the error. Not so?

          (And in what sense is this issue resolved as Fixed? Was there some code fix?)

          Jesse Glick added a comment - it would be more helpful if the workflow engine would catch the exception and report the duplicate symbol Right, that is JENKINS-55349 . I need to guess which symbol is duplicate Sorry, my understanding of the issue was that the problematic symbol was known, or discoverable by having steps to reproduce the error. Not so? (And in what sense is this issue resolved as Fixed ? Was there some code fix?)

          Ulli Hafner added a comment -

          Right, that is JENKINS-55349.

          Yes, exactly. I opened that additional issue since JENKINS-55328 is about a missing pmdParser and androidLintParser symbol. I added that now so the issue is fixed until someone finds the next duplicate symbol.

          Sorry, my understanding of the issue was that the problematic symbol was known, or discoverable by having steps to reproduce the error. Not so? (And in what sense is this issue resolved as Fixed? Was there some code fix?)

          It was some guessing based on the set of installed plugins.

          Ulli Hafner added a comment - Right, that is JENKINS-55349 . Yes, exactly. I opened that additional issue since JENKINS-55328 is about a missing pmdParser and androidLintParser symbol. I added that now so the issue is fixed until someone finds the next duplicate symbol. Sorry, my understanding of the issue was that the problematic symbol was known, or discoverable by having steps to reproduce the error. Not so? (And in what sense is this issue resolved as Fixed? Was there some code fix?) It was some guessing based on the set of installed plugins.

            drulli Ulli Hafner
            zava2012 Alexander Yarosenko
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: