timja / jenkins-gh-issues-poc-06-18

0 stars 0 forks source link

[JENKINS-45909] UpstreamTrigger fails with NPE #9279

Closed timja closed 7 years ago

timja commented 7 years ago

Within the current Jenkins, the upstrem-trigger mechanism fails with a NPE.

To see the error, just create two "Pipeline" projects via Jenkins Web-UI:

First is named "Kevin", the script is:

pipeline {

  agent any

  stages {
    stage("Hello") {
      steps {
  script {
      sh "echo Kevin here"
  }
      }
    }
  }

}

Starting this project works fine.

Now, second project is named "Chantalle", the script is:

pipeline {

  agent any

  triggers {
    upstream(
      threshold: hudson.model.Result.SUCCESS,
      upstreamProjects: "../Kevin"
    )
  }

  stages {
    stage("Hello") {
      steps {
  script {
      sh "echo Chantalle here"
  }
      }
    }
  }

}

Similar, starting this project at its own works fine.

But when starting "Kevin" again, I expect "Chantalle" to be executed afterwards. Instead, a NPE is thrown, and "Chantalle" does not start:

Aug 01, 2017 1:39:38 PM org.jenkinsci.plugins.workflow.job.WorkflowRun finish
INFO: Kevin #6 completed: SUCCESS
Aug 01, 2017 1:39:38 PM hudson.model.listeners.RunListener report
WARNING: RunListener failed
java.lang.NullPointerException
    at java.util.StringTokenizer.(StringTokenizer.java:199)
    at java.util.StringTokenizer.(StringTokenizer.java:221)
    at hudson.model.Items.fromNameList(Items.java:231)
    at jenkins.triggers.ReverseBuildTrigger$RunListenerImpl.calculateCache(ReverseBuildTrigger.java:256)
    at jenkins.triggers.ReverseBuildTrigger$RunListenerImpl.onCompleted(ReverseBuildTrigger.java:279)
    at hudson.model.listeners.RunListener.fireCompleted(RunListener.java:211)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.finish(WorkflowRun.java:663)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.access$1400(WorkflowRun.java:134)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun$GraphL.onNewHead(WorkflowRun.java:966)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.notifyListeners(CpsFlowExecution.java:1221)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$3.run(CpsThreadGroup.java:407)
    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$1.run(CpsVmExecutorService.java:35)
    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:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Originally reported by ghostcity, imported from: UpstreamTrigger fails with NPE
  • assignee: abayer
  • status: Resolved
  • priority: Blocker
  • resolution: Fixed
  • resolved: 2017-08-14T10:34:38+00:00
  • imported: 2022/01/10
timja commented 7 years ago

ghostcity:

Taking a look into the code tells me, the first argument for Java's StringTokenizer is null. This is weird, because its value should be taken from Pipline script's file

[...]
      upstreamProjects: "../Kevin"
[...]
timja commented 7 years ago

tumbl3w33d:

abayer is there any temporary workaround to this? It seems quite critical to me that the upstream trigger completely doesn't work with the latest revisions. Can you tell which plugins (or jenkins core?) I could downgrade to get around this issue and get my toolchain running again?

timja commented 7 years ago

abayer:

Will check on this today.

timja commented 7 years ago

abayer:

Ok, so far, this works with core 2.60 and workflow-job 2.11 - trying further combinations...

timja commented 7 years ago

abayer:

So with latest of everything on 2.72, with new jobs created after upgrading to 2.72, this works. tumbl3w33d is uploading the config.xmls for their failing job(s) so I can see why trigger.upstreamProjects is null...

timja commented 7 years ago

tumbl3w33d:

In the attached version of the config.xml you see the upstream job "Kevin" instead of "../Kevin", but that's just from playing around with different notations. It's broken either way.

timja commented 7 years ago

abayer:

We're nailing this down over IRC at the moment - the problem seems to be that at least one other job has a ReverseBuildTrigger with a null upstreamProjects. That'd cause the NPE in question, even when you're running an unrelated job. So as a workaround while I figure out a real fix for this, you can run https://gist.github.com/abayer/79700ea922e523d2e82a28675b1181e6 in Manage Jenkins -> Script Console to find job(s) with null upstreamProjects. You then need to fix those jobs to make sure they have non-null upstreamProjects and re-run them.

Meanwhile, I'm trying to decide how we keep this from happening in the future.

timja commented 7 years ago

tumbl3w33d:

Tons of kudos to abayer for this intensive support. We found a nice way to DoS a jenkins' jobs that depend on upstream triggers.

timja commented 7 years ago

ghostcity:

Have been just informed about the problem. Big thank you for your support!

timja commented 7 years ago

abayer:

PR up at https://github.com/jenkinsci/jenkins/pull/2966

timja commented 7 years ago

scm_issue_link:

Code changed in jenkins
User: Andrew Bayer
Path:
core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java
test/src/test/java/jenkins/triggers/ReverseBuildTriggerTest.java
http://jenkins-ci.org/commit/jenkins/f8dd58425f54e27f5bf74a0bb769c50cbb96bc08
Log:
[FIXED JENKINS-45909] ReverseBuildTrigger.upstreamProjects should be null safe

timja commented 7 years ago

oleg_nenashev:

The fix has been integrated towards Jenkins 2.74. Marking it as LTS candidate.

IMHO the fix is not ideal, JENKINS-46161 is a follow-up

timja commented 2 years ago

[Originally related to: JENKINS-46161]