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

A wrong configuration of CasC yaml kill Jenkins startup

      While testing the CasC plugin I've found that if the yaml is wrong, Jenkins stop restarting, leaving you with an unoperational instance.

      Steps to reproduce:

      • Create a yaml with ssh credentials
      • Import this yaml
      • Remove credentials and ssh-credentials
      • Restart Jenkins

      Expected:

      • Some settings are established, others not.

      Current behavior:

      • Jenkins doesn't start.

       

      Jun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailed
      Jun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailed SEVERE: Failed ConfigurationAsCode.init
      java.lang.Error: java.lang.reflect.InvocationTargetException
       at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110)
       at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
       at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
       at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096)
       at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
       at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
       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)Caused by: java.lang.reflect.InvocationTargetException
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498) at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 more
      Caused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials>
       at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642)
       at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277)
       at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
      Jun 05, 2019 5:27:03 PM hudson.util.BootFailure publish SEVERE: Failed to initialize Jenkins
      hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
       at hudson.WebAppMain$3.run(WebAppMain.java:250)
      Caused by: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
       at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)
       at jenkins.InitReactorRunner.run(InitReactorRunner.java:48)
       at jenkins.model.Jenkins.executeReactor(Jenkins.java:1130)
       at jenkins.model.Jenkins.<init>(Jenkins.java:932)
       at hudson.model.Hudson.<init>(Hudson.java:85)
       at hudson.model.Hudson.<init>(Hudson.java:81)
       at hudson.WebAppMain$3.run(WebAppMain.java:233)
      Caused by: java.lang.Error: java.lang.reflect.InvocationTargetException
       at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110)
       at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
       at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
       at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096)
       at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
       at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
       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)
      Caused by: java.lang.reflect.InvocationTargetException
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 more
      Caused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials>
       at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642)
       at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549)
       at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277)
       at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUp INFO: Stopping Jenkins
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttained INFO: Started termination
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttained INFO: Completed termination
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpDisconnectComputers INFO: Starting node disconnection
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpShutdownPluginManager INFO: Stopping plugin manager
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpPersistQueue INFO: Persisting build queue
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpAwaitDisconnects INFO: Waiting for node disconnection completion
      Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUp INFO: Jenkins stopped
      

          [JENKINS-57862] A wrong configuration of CasC yaml kill Jenkins startup

          Ramon Leon created issue -

          Oleg Nenashev added a comment -

          mramonleon for this plugin it is better to duplicate the issue in https://github.com/jenkinsci/configuration-as-code-plugin/issues

          Oleg Nenashev added a comment - mramonleon for this plugin it is better to duplicate the issue in  https://github.com/jenkinsci/configuration-as-code-plugin/issues

          Ramon Leon added a comment -

          Ramon Leon added a comment - https://github.com/jenkinsci/configuration-as-code-plugin/issues/912

          Ramon Leon added a comment -

          Also if the yaml file is removed you have to edit io.jenkins.plugins.casc.CasCGlobalConfig.xml to remove the file.

          Ramon Leon added a comment - Also if the yaml file is removed you have to edit io.jenkins.plugins.casc.CasCGlobalConfig.xml to remove the file.

          [Originally posted on the associated GitHub issue, replicating here for visibility.]

          I have personally worked around this by applying CasC configs through a job, and disabling CasC for Jenkins startup by pointing it to an empty file.

          That is, I have a job that does a SCM checkout, and then runs something like this as a system-groovy script (from the groovy plugin):

          import jenkins.model.GlobalConfiguration
          import io.jenkins.plugins.casc.ConfigurationAsCode
          import io.jenkins.plugins.casc.CasCGlobalConfig
          def workspacePath = build.environment.WORKSPACE
          def jcascConfig = GlobalConfiguration.all().get(CasCGlobalConfig.class)
          try {
          	jcascConfig.setConfigurationPath(workspacePath)
          	jcascConfig.save()
          	ConfigurationAsCode.get().configure()
          } finally {
          	jcascConfig.setConfigurationPath("${workspacePath}/empty.yaml")
          	jcascConfig.save()
          }
          

          (Note that below CasC version 1.20, you need to have at least one setting in empty.yaml, a completely empty file generates a null pointer exception.)

          Rudolf-Walter Kiss-Szakacs added a comment - [Originally posted on the associated GitHub issue, replicating here for visibility.] I have personally worked around this by applying CasC configs through a job, and disabling CasC for Jenkins startup by pointing it to an empty file. That is, I have a job that does a SCM checkout, and then runs something like this as a system-groovy script (from the groovy plugin): import jenkins.model.GlobalConfiguration import io.jenkins.plugins.casc.ConfigurationAsCode import io.jenkins.plugins.casc.CasCGlobalConfig def workspacePath = build.environment.WORKSPACE def jcascConfig = GlobalConfiguration.all().get(CasCGlobalConfig.class) try { jcascConfig.setConfigurationPath(workspacePath) jcascConfig.save() ConfigurationAsCode.get().configure() } finally { jcascConfig.setConfigurationPath( "${workspacePath}/empty.yaml" ) jcascConfig.save() } (Note that below CasC version 1.20, you need to have at least one setting in empty.yaml , a completely empty file generates a null pointer exception.)
          Daniel Estermann made changes -
          Description Original: While testing the CasC plugin I've found that if the yaml is wrong, Jenkins stop restarting, leaving you with an unoperational instance.

          Steps to reproduce:
           * Create a yaml with ssh credentials
           * Import this yaml
           * Remove credentials and ssh-credentials
           * Restart Jenkins

          Expected:
           * Some settings are established, others not.

          Current behavior:
           * Jenkins doesn't start.

           
          {code:java}
          Jun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailedJun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailedSEVERE: Failed ConfigurationAsCode.initjava.lang.Error: java.lang.reflect.InvocationTargetException at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110) at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) 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)Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 moreCaused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials> at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642) at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549) at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277) at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
          Jun 05, 2019 5:27:03 PM hudson.util.BootFailure publishSEVERE: Failed to initialize Jenkinshudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException at hudson.WebAppMain$3.run(WebAppMain.java:250)Caused by: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282) at jenkins.InitReactorRunner.run(InitReactorRunner.java:48) at jenkins.model.Jenkins.executeReactor(Jenkins.java:1130) at jenkins.model.Jenkins.<init>(Jenkins.java:932) at hudson.model.Hudson.<init>(Hudson.java:85) at hudson.model.Hudson.<init>(Hudson.java:81) at hudson.WebAppMain$3.run(WebAppMain.java:233)Caused by: java.lang.Error: java.lang.reflect.InvocationTargetException at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110) at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) 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)Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 moreCaused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials> at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642) at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549) at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277) at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUpINFO: Stopping JenkinsJun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttainedINFO: Started terminationJun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttainedINFO: Completed terminationJun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpDisconnectComputersINFO: Starting node disconnectionJun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpShutdownPluginManagerINFO: Stopping plugin managerJun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpPersistQueueINFO: Persisting build queueJun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpAwaitDisconnectsINFO: Waiting for node disconnection completionJun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUpINFO: Jenkins stopped
          {code}
          New: While testing the CasC plugin I've found that if the yaml is wrong, Jenkins stop restarting, leaving you with an unoperational instance.

          Steps to reproduce:
           * Create a yaml with ssh credentials
           * Import this yaml
           * Remove credentials and ssh-credentials
           * Restart Jenkins

          Expected:
           * Some settings are established, others not.

          Current behavior:
           * Jenkins doesn't start.

           
          {code:java}
          Jun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailed
          Jun 05, 2019 5:27:03 PM jenkins.InitReactorRunner$1 onTaskFailed SEVERE: Failed ConfigurationAsCode.init
          java.lang.Error: java.lang.reflect.InvocationTargetException
           at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110)
           at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
           at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
           at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096)
           at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
           at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
           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)Caused by: java.lang.reflect.InvocationTargetException
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498) at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 more
          Caused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials>
           at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642)
           at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277)
           at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
          Jun 05, 2019 5:27:03 PM hudson.util.BootFailure publish SEVERE: Failed to initialize Jenkins
          hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
           at hudson.WebAppMain$3.run(WebAppMain.java:250)
          Caused by: org.jvnet.hudson.reactor.ReactorException: java.lang.Error: java.lang.reflect.InvocationTargetException
           at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)
           at jenkins.InitReactorRunner.run(InitReactorRunner.java:48)
           at jenkins.model.Jenkins.executeReactor(Jenkins.java:1130)
           at jenkins.model.Jenkins.<init>(Jenkins.java:932)
           at hudson.model.Hudson.<init>(Hudson.java:85)
           at hudson.model.Hudson.<init>(Hudson.java:81)
           at hudson.WebAppMain$3.run(WebAppMain.java:233)
          Caused by: java.lang.Error: java.lang.reflect.InvocationTargetException
           at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:110)
           at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
           at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
           at jenkins.model.Jenkins$5.runTask(Jenkins.java:1096)
           at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
           at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
           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)
          Caused by: java.lang.reflect.InvocationTargetException
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
           at java.lang.reflect.Method.invoke(Method.java:498)
           at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104) ... 8 more
          Caused by: io.jenkins.plugins.casc.ConfiguratorException: No configurator for root element <credentials>
           at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:642)
           at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:666)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:650)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:549)
           at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:277)
           at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:269) ... 13 more
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUp INFO: Stopping Jenkins
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttained INFO: Started termination
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins$18 onAttained INFO: Completed termination
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpDisconnectComputers INFO: Starting node disconnection
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpShutdownPluginManager INFO: Stopping plugin manager
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpPersistQueue INFO: Persisting build queue
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins _cleanUpAwaitDisconnects INFO: Waiting for node disconnection completion
          Jun 05, 2019 5:27:03 PM jenkins.model.Jenkins cleanUp INFO: Jenkins stopped
          {code}

            ewel Ewelina Wilkosz
            mramonleon Ramon Leon
            Votes:
            2 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: