diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index 4a8e3dd901087490ace0d33414d07520f081a2ca..dab18dc8dd219d70d237a81fdbc63e40f71e72ee 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -323,7 +323,11 @@ public abstract class AbstractProject
,R extends A
builds = buildMixIn.getRunMap();
triggers().setOwner(this);
for (Trigger t : triggers()) {
- t.start(this, Items.currentlyUpdatingByXml());
+ try {
+ t.start(this, Items.currentlyUpdatingByXml());
+ } catch (Throwable e) {
+ LOGGER.log(Level.WARNING, "could not start trigger while loading project '" + getFullName() + "'", e);
+ }
}
if(scm==null)
scm = new NullSCM(); // perhaps it was pointing to a plugin that no longer exists.
diff --git a/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy b/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy
index 2db8384a9a243ae064790177b58e244942b5503b..f40a32ed3aaf43ebe1229a61b6d2b32a71caf45a 100644
--- a/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy
+++ b/test/src/test/groovy/hudson/model/AbstractProjectTest.groovy
@@ -48,6 +48,7 @@ import hudson.Util;
import hudson.tasks.ArtifactArchiver
import hudson.triggers.SCMTrigger;
import hudson.triggers.TimerTrigger
+import hudson.triggers.Trigger
import hudson.triggers.TriggerDescriptor;
import hudson.util.StreamTaskListener;
import hudson.util.OneShotEvent
@@ -58,6 +59,7 @@ import org.jvnet.hudson.test.HudsonTestCase
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.MemoryAssert
import org.jvnet.hudson.test.SequenceLock;
+import org.jvnet.hudson.test.TestExtension;
import org.jvnet.hudson.test.recipes.PresetData;
import org.jvnet.hudson.test.recipes.PresetData.DataSet
import org.apache.commons.io.FileUtils;
@@ -592,4 +594,36 @@ public class AbstractProjectTest extends HudsonTestCase {
}
return con
}
+
+ @Issue("JENKINS-27549")
+ public void testLoadingWithNPEOnTriggerStart() {
+ AbstractProject project = jenkins.createProjectFromXML("foo", getClass().getResourceAsStream("AbstractProjectTest/npeTrigger.xml"))
+
+ assert project.triggers().size() == 1
+ }
+
+ static class MockBuildTriggerThrowsNPEOnStart