-
Bug
-
Resolution: Not A Defect
-
Blocker
-
None
-
Jenkins 2.235.3, JCasC 1.42, Email-Ext 2.72
-
Powered by SuggestiMate
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
Yes, there have been changes, 2.72 is the first to actually support JCasC. I will look at the trace.
Looks like it might be as simple as changing your "extendedEmailPublisher:" to "email-ext:"
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
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.
Please see the example on the plugin repository: https://github.com/jenkinsci/email-ext-plugin/blob/master/src/test/resources/configuration-as-code.yml
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...
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:
- 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.
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.
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.
I wish I knew more about JCasC to be able to come up with a better solution. My apologies that it caused you issues.
Thanks. And thanks alecharp for the pointer to the test config, that helped me change mine.
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