• Icon: Bug Bug
    • Resolution: Not A Defect
    • Icon: Blocker Blocker
    • email-ext-plugin
    • None
    • Jenkins 2.235.3, JCasC 1.42, Email-Ext 2.72

      After update to Jenkins plugins, Email-Ext plugin causes a load failure by JCasC.  See attached.

      Have to downgrade to2.71 to get Jenkins to start again.

      Has changes for JCasC configuration code changed?

       

          [JENKINS-63292] Email-ext 2.72 and JCasC cause launch failure

          Alan Sparks added a comment -

          Also for completeness, the Jenkins JCasC configuration section as currently (and previously) used:

           

          extendedEmailPublisher:
          adminRequiredForTemplateTesting: false
          allowUnregisteredEnabled: false
          charset: "UTF-8"
          debugMode: false
          defaultBody: " - Build # - :\r\n\r\nCheck console output at to view the results."
          defaultContentType: "text/plain"
          defaultSubject: " - Build # - !"
          maxAttachmentSize: -1
          maxAttachmentSizeMb: 0
          precedenceBulk: false
          smtpServer: "${MF_SMTP_SERVER}"
          useSsl: false
          watchingEnabled: false

          Alan Sparks added a comment - Also for completeness, the Jenkins JCasC configuration section as currently (and previously) used:   extendedEmailPublisher: adminRequiredForTemplateTesting: false allowUnregisteredEnabled: false charset: "UTF-8" debugMode: false defaultBody: " - Build # - :\r\n\r\nCheck console output at to view the results." defaultContentType: "text/plain" defaultSubject: " - Build # - !" maxAttachmentSize: -1 maxAttachmentSizeMb: 0 precedenceBulk: false smtpServer: "${MF_SMTP_SERVER}" useSsl: false watchingEnabled: false

          Alex Earl added a comment -

          Yes, there have been changes, 2.72 is the first to actually support JCasC. I will look at the trace.

          Alex Earl added a comment - Yes, there have been changes, 2.72 is the first to actually support JCasC. I will look at the trace.

          Alex Earl added a comment -

          Looks like it might be as simple as changing your "extendedEmailPublisher:" to "email-ext:"

          Alex Earl added a comment - Looks like it might be as simple as changing your "extendedEmailPublisher:" to "email-ext:"

          Alan Sparks added a comment -

          I did actually test that a few minutes ago, and got another stack trace as below.

          Do you have idea what options are allowed now, changes since the original working configs?

           

          2020-08-04 15:22:40.194+0000 [id=29] SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init
          io.jenkins.plugins.casc.ConfiguratorException: 'useSsl' is deprecated
          at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:321)
          at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287)
          at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:351)
          at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287)
          at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$8(ConfigurationAsCode.java:755)
          at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:691)
          Caused: io.jenkins.plugins.casc.ConfiguratorException: unclassified: error configuring 'unclassified' with class io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator configurator
          at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:697)
          at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:755)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:740)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:616)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:298)
          at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:290)
          Caused: 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)
          Caused: java.lang.Error
          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:1131)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
          at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
          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)
          2020-08-04 15:22:40.197+0000 [id=20] SEVERE hudson.util.BootFailure#publish: Failed to initialize Jenkins
          io.jenkins.plugins.casc.ConfiguratorException: 'useSsl' is deprecated
          at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:321)
          at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287)
          at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:351)
          at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287)
          at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$8(ConfigurationAsCode.java:755)
          at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:691)
          Caused: io.jenkins.plugins.casc.ConfiguratorException: unclassified: error configuring 'unclassified' with class io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator configurator
          at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:697)
          at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:755)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:740)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:616)
          at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:298)
          at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:290)
          Caused: 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)
          Caused: java.lang.Error
          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:1131)
          at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
          at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
          at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
          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: org.jvnet.hudson.reactor.ReactorException
          at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)
          at jenkins.InitReactorRunner.run(InitReactorRunner.java:50)
          at jenkins.model.Jenkins.executeReactor(Jenkins.java:1164)
          at jenkins.model.Jenkins.<init>(Jenkins.java:964)
          at hudson.model.Hudson.<init>(Hudson.java:85)
          at hudson.model.Hudson.<init>(Hudson.java:81)
          at hudson.WebAppMain$3.run(WebAppMain.java:262)
          Caused: hudson.util.HudsonFailedToLoad
          at hudson.WebAppMain$3.run(WebAppMain.java:279)
          2020-08-04 15:22:40.210+0000 [id=20] INFO jenkins.model.Jenkins#cleanUp: Stopping Jenkins
          2020-08-04 15:22:40.252+0000 [id=20] INFO jenkins.model.Jenkins$18#onAttained: Started termination
          2020-08-04 15:22:40.274+0000 [id=20] INFO jenkins.model.Jenkins$18#onAttained: Completed termination
          2020-08-04 15:22:40.275+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpDisconnectComputers: Starting node disconnection
          2020-08-04 15:22:40.279+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpShutdownPluginManager: Stopping plugin manager
          2020-08-04 15:22:40.944+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpPersistQueue: Persisting build queue
          2020-08-04 15:22:40.970+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpAwaitDisconnects: Waiting for node disconnection completion
          2020-08-04 15:22:40.971+0000 [id=20] INFO jenkins.model.Jenkins#cleanUp: Jenkins stopped

           

           

          Alan Sparks added a comment - I did actually test that a few minutes ago, and got another stack trace as below. Do you have idea what options are allowed now, changes since the original working configs?   2020-08-04 15:22:40.194+0000 [id=29] SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init io.jenkins.plugins.casc.ConfiguratorException: 'useSsl' is deprecated at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:321) at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287) at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:351) at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287) at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$8(ConfigurationAsCode.java:755) at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:691) Caused: io.jenkins.plugins.casc.ConfiguratorException: unclassified: error configuring 'unclassified' with class io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator configurator at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:697) at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:755) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:740) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:616) at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:298) at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:290) Caused: 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) Caused: java.lang.Error 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:1131) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59) 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) 2020-08-04 15:22:40.197+0000 [id=20] SEVERE hudson.util.BootFailure#publish: Failed to initialize Jenkins io.jenkins.plugins.casc.ConfiguratorException: 'useSsl' is deprecated at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:321) at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287) at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:351) at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:287) at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$8(ConfigurationAsCode.java:755) at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:691) Caused: io.jenkins.plugins.casc.ConfiguratorException: unclassified: error configuring 'unclassified' with class io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator configurator at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:697) at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:755) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:740) at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:616) at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:298) at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:290) Caused: 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) Caused: java.lang.Error 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:1131) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59) 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: org.jvnet.hudson.reactor.ReactorException at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282) at jenkins.InitReactorRunner.run(InitReactorRunner.java:50) at jenkins.model.Jenkins.executeReactor(Jenkins.java:1164) at jenkins.model.Jenkins.<init>(Jenkins.java:964) at hudson.model.Hudson.<init>(Hudson.java:85) at hudson.model.Hudson.<init>(Hudson.java:81) at hudson.WebAppMain$3.run(WebAppMain.java:262) Caused: hudson.util.HudsonFailedToLoad at hudson.WebAppMain$3.run(WebAppMain.java:279) 2020-08-04 15:22:40.210+0000 [id=20] INFO jenkins.model.Jenkins#cleanUp: Stopping Jenkins 2020-08-04 15:22:40.252+0000 [id=20] INFO jenkins.model.Jenkins$18#onAttained: Started termination 2020-08-04 15:22:40.274+0000 [id=20] INFO jenkins.model.Jenkins$18#onAttained: Completed termination 2020-08-04 15:22:40.275+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpDisconnectComputers: Starting node disconnection 2020-08-04 15:22:40.279+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpShutdownPluginManager: Stopping plugin manager 2020-08-04 15:22:40.944+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpPersistQueue: Persisting build queue 2020-08-04 15:22:40.970+0000 [id=20] INFO jenkins.model.Jenkins#_cleanUpAwaitDisconnects: Waiting for node disconnection completion 2020-08-04 15:22:40.971+0000 [id=20] INFO jenkins.model.Jenkins#cleanUp: Jenkins stopped    

          Alex Earl added a comment -

          alecharp Any help here? I am not super familiar with JCasC

          Alex Earl added a comment - alecharp Any help here? I am not super familiar with JCasC

          Could you make fix the indentation (welcome to the YAML world (sarcasm)) on the configuration example you provided?

          From what I understand of the stack-trace, it seems that the useSsl is being read by the unclassified category. It seems odd.

          Adrien Lecharpentier added a comment - Could you make fix the indentation (welcome to the YAML world (sarcasm)) on the configuration example you provided? From what I understand of the stack-trace, it seems that the useSsl is being read by the unclassified category. It seems odd.

          Adrien Lecharpentier added a comment - Please see the example on the plugin repository: https://github.com/jenkinsci/email-ext-plugin/blob/master/src/test/resources/configuration-as-code.yml

          Alan Sparks added a comment - - edited

          I'll look at the provided config snippet and try to make it work.   It appears there is a serious change in the configuration block, since it worked with the previous indentation.

          It might be a good idea to let people know this appears to be a breaking change for those using JCasC...

          Alan Sparks added a comment - - edited I'll look at the provided config snippet and try to make it work.   It appears there is a serious change in the configuration block, since it worked with the previous indentation. It might be a good idea to let people know this appears to be a breaking change for those using JCasC...

          Alan Sparks added a comment -

          alecharp slide_o_mix Looking at your configuration this is very different from what was working with the last version of email-ext.  Is there any description of all those config items, and which are required?  Especially when talking of new levels, like "addAccount" and "mailAccount".

          Alan Sparks added a comment - alecharp slide_o_mix Looking at your configuration this is very different from what was working with the last version of email-ext.  Is there any description of all those config items, and which are required?  Especially when talking of new levels, like "addAccount" and "mailAccount".

          webminster to be honest, I don't think we can say that version prior to 2.72 were JCasC compatible. Sure, some fields were configurable but the complete configuration was not possible.

          slide_o_mix did a great job at making sure that everything was configurable through JCasC.

          We could advertise that if anyone was configuring email-ext with JCasC using a version prior to 2.72, then that configuration is no longer compatible.

          This is due to the fact that:

          1. JCasC team did a great job at trying to make as many plugin compatible as possible out of the box. This is why some fields were configurable
          2. however, due to the legacy code in email-ext and the way some fields were configured before (through the UI and some hack in the Java code), slide_o_mix had to refactor those elements.

          I do understand  this is not really what you wish to ear webminster, but in the end, the plugin was not compatible with JCasC before 2.72.

          Adrien Lecharpentier added a comment - webminster to be honest, I don't think we can say that version prior to 2.72 were JCasC compatible. Sure, some fields were configurable but the complete configuration was not possible. slide_o_mix did a great job at making sure that everything was configurable through JCasC. We could advertise that if anyone was configuring email-ext with JCasC using a version prior to 2.72 , then that configuration is no longer compatible. This is due to the fact that: JCasC team did a great job at trying to make as many plugin compatible as possible out of the box. This is why some fields were configurable however, due to the legacy code in email-ext and the way some fields were configured before (through the UI and some hack in the Java code), slide_o_mix had to refactor those elements. I do understand  this is not really what you wish to ear webminster , but in the end, the plugin was not compatible with JCasC before 2.72 .

          Alex Earl added a comment -

          This is the first version that JCasC is actually supported in email-ext. I don't know if there is a way to migrate the JCasC settings from a version where it was not supported to a version where it is. JCasC is very new to me. I implemented the changes required for the support, but I don't know much about JCasC itself.

          Alex Earl added a comment - This is the first version that JCasC is actually supported in email-ext. I don't know if there is a way to migrate the JCasC settings from a version where it was not supported to a version where it is. JCasC is very new to me. I implemented the changes required for the support, but I don't know much about JCasC itself.

          Alan Sparks added a comment -

          OK, that's fair enough - been the second plugin in 2 weeks that required a jenkins.yaml redo because of JCasC support, so very surprised.  Since I'd found JCasC configs for this plugin on the Net was not aware that it wasn't "officially" supported.

          Now that I know this is an issue I can deal with it.  Thanks.

          Alan Sparks added a comment - OK, that's fair enough - been the second plugin in 2 weeks that required a jenkins.yaml redo because of JCasC support, so very surprised.  Since I'd found JCasC configs for this plugin on the Net was not aware that it wasn't "officially" supported. Now that I know this is an issue I can deal with it.  Thanks.

          Alex Earl added a comment -

          I wish I knew more about JCasC to be able to come up with a better solution. My apologies that it caused you issues.

          Alex Earl added a comment - I wish I knew more about JCasC to be able to come up with a better solution. My apologies that it caused you issues.

          Alan Sparks added a comment -

          Thanks.  And thanks alecharp for the pointer to the test config, that helped me change mine.

          Alan Sparks added a comment - Thanks.  And thanks alecharp for the pointer to the test config, that helped me change mine.

            slide_o_mix Alex Earl
            webminster Alan Sparks
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: