higanworks / rundeck-slack-incoming-webhook-plugin Goto Github PK
View Code? Open in Web Editor NEWThis project forked from bitplaces/rundeck-slack-plugin
A Rundeck Plugin for Slack Incoming-WebHook
License: Apache License 2.0
This project forked from bitplaces/rundeck-slack-plugin
A Rundeck Plugin for Slack Incoming-WebHook
License: Apache License 2.0
Looks like we need to make sure that double quotes get properly cancelled in the JSON payload, or just strip them out with .replace("\"", "")
Looks like they were recently added, so we should support them: https://rundeck.org/docs/developer/notification-plugin.html#about
/cc @sawanoboly :-)
Hi,
I've placed the jar file /var/lib/rundeck/libext/
However, I don't see the option 'Slack web hook' under Notification. Request your help with this regard.
Rundeck version 2.8.4
Is there any Step by Step install guide..
This is really not technical issue, but I'd love to make it work through code definition, instead of using GUI to set up Slack webhook.
Any ways?
doesn't seem to work on rundeck 2.6
It's currently required to be supplied with every job, which is a maintenance nightmare and also exposes secret token.
Hi all,
A little issue append when SLASH character appear in message.
In a job with option i've a windows path like "C:\mydirto\myfile.txt"
Slash in path make slack error on alerting. Exclusively for (On success and On Failure) but it work for On Start cause options value are not send with the slack message.
:)
Hi all,
I 've installed slack plugin on my Rundeck build | 2.10.8-1 server.
Slack option correctly appear under Notification part.
I set my slack webhook URL for success and all other possibilities
But i never receive alert on Slack.
It work when i put a simple cURL to my slack webhook url in a command script..
I 've only put the JAR plugin in the right directory
i don't set template or global webhook URL in the project config file.
Any idea ?
Hi,
today I updated Rundeck and the Slack Plugin to the most recent versions. Unfortunately it started to throw invalid_payload
errors on me: (censored webhook and urls)
ERROR NotificationService: Error sending notification: Notification{eventTrigger='onfailure', type='SlackNotification', content='{"webhook_url":"https://hooks.slack.com/services/..."}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [invalid_payload].
payload=
{
"attachments":[
{
"fallback":"Failed: <https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"pretext":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"color":"danger",
"fields":[
{
"title":"Job Name",
"value":"<https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"short":true
},
{
"title":"Project",
"value":"Cronjobs",
"short":true
},
{
"title":"Status",
"value":"Failed",
"short":true
},
{
"title":"Execution ID",
"value":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|#2,729,251>",
"short":true
},
{
"title":"Options",
"value":"N/A",
"short":true
},
{
"title":"Started By",
"value":"s.herzberg",
"short":true
}
,{
"title":"Failed Nodes",
"value":""rundeck.company.it"",
"short":false
}
]
}
]
}
com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [invalid_payload].
payload=
{
"attachments":[
{
"fallback":"Failed: <https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"pretext":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"color":"danger",
"fields":[
{
"title":"Job Name",
"value":"<https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
"short":true
},
{
"title":"Project",
"value":"Cronjobs",
"short":true
},
{
"title":"Status",
"value":"Failed",
"short":true
},
{
"title":"Execution ID",
"value":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|#2,729,251>",
"short":true
},
{
"title":"Options",
"value":"N/A",
"short":true
},
{
"title":"Started By",
"value":"s.herzberg",
"short":true
}
,{
"title":"Failed Nodes",
"value":""rundeck.company.it"",
"short":false
}
]
}
]
}
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:125)
at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:475)
at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:337)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:146)
at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:88)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:85)
at rundeck.services.ExecutionService$_saveExecutionState_closure60.doCall(ExecutionService.groovy:2089)
at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:1994)
at rundeck.quartzjobs.ExecutionJob$_saveState_closure4.doCall(ExecutionJob.groovy:480)
at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:418)
at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:490)
at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:146)
at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:74)
at com.codahale.metrics.Timer.time(Timer.java:99)
at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:73)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
The moment we add this to our Rundeck and restart the application, upon login we fail, no user is able to log in.
does this plugin require modification to the jaas-loginmodule.conf? I am using local ssh groups with an accompany ACL file for login rights. This module seems to break this?
`
2017-08-03 10:41:16.747:WARN:oejj.JAASLoginService:qtp81628611-18:
javax.security.auth.login.LoginException: Login Failure: all modules ignored
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:906)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
at org.eclipse.jetty.jaas.JAASLoginService.login(JAASLoginService.java:241)
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52)
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192)
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:446)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:748)
Aug 03, 2017 10:44:11 AM org.rundeck.jaas.pam.AbstractPamLoginModule debug
INFO: PAM authentication trying (sshd) for: jamey
Aug 03, 2017 10:44:13 AM org.rundeck.jaas.pam.AbstractPamLoginModule debug
INFO: pam_authenticate failed : Authentication failure
org.jvnet.libpam.PAMException: pam_authenticate failed : Authentication failure
at org.jvnet.libpam.PAM.check(PAM.java:106)
at org.jvnet.libpam.PAM.authenticate(PAM.java:124)
at org.rundeck.jaas.pam.AbstractPamLoginModule.authenticate(AbstractPamLoginModule.java:85)
at org.rundeck.jaas.AbstractSharedLoginModule.login(AbstractSharedLoginModule.java:78)
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 javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
at org.eclipse.jetty.jaas.JAASLoginService.login(JAASLoginService.java:241)
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52)
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192)
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:446)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:748)
`
com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [No payload received].
payload=%7B%0A+++%22attachments%22%3A%5B%0A++++++%7B%0A+++++++++%22fallback%22%3A%22Succeeded%3A+%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7CExecution+%23133%3E+of+job+%3Chttp%3A%2F%2Fxxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++%22pretext%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7CExecution+%23133%3E+of+job+%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++%22color%22%3A%22good%22%2C%0A+++++++++%22fields%22%3A%5B%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Job+Name%22%2C%0A+++++++++++++++%22value%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Ftest%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Project%22%2C%0A+++++++++++++++%22value%22%3A%22test%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Status%22%2C%0A+++++++++++++++%22value%22%3A%22Succeeded%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Execution+ID%22%2C%0A+++++++++++++++%22value%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7C%23133%3E%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%0A%5D%0A++++++%7D%0A+++%5D%0A%7D%0A%0A
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:130)
at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:471)
at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:333)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:142)
at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:84)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:81)
at rundeck.services.ExecutionService$_saveExecutionState_closure54.doCall(ExecutionService.groovy:1904)
at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:1809)
at rundeck.quartzjobs.ExecutionJob$_saveState_closure3.doCall(ExecutionJob.groovy:449)
at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:392)
at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:458)
at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:143)
at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:71)
at com.codahale.metrics.Timer.time(Timer.java:99)
at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:70)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Is there a way to add support for custom notifications (or does this already exist?), such that notifications can be smaller and also include context variables, as well as job output if possible.
The original project that this was forked from had support for external Freemarker templates to achieve this, maybe this is already included in this plugin but unconfigurable? If not, would it be possible to add this functionality back in?
Feature request: We've got a lot of jobs that mostly involve one "target", for example we have a job that updates specific targets. I would love to show in Slack which target has been chosen for the job that is being run / has failed / has successfully ran. For us, picking an option that is setup in the job or maybe inserting a string with the @option.target@
variables would be awesome.
The integrations failing with below error and I use Rundeck version 2.6.2
Unable to POST notification after 1 tries: success for execution 32 (succeeded): server response: 500 Server Error
Hi,
Could it be possible to include the Job options selected and its values in the notification? For example, we have an option to select an app version number to be deployed, and it would be nice to see that in the notificaction.
Thanks,
I would love for a way to make this just take up a single line. Is there a setting I can set to customize the format?
i tried to use this rundeck 2.5 and saw some errors about the template being messed up.
If a user inputs an option with a space in it, no message is sent to slack. It looks like passing options cannot handle spaces.
Example:
option: -purpose
option value: this is my option value
The above option value will cause the slack webhook plugin to fail.
Hello,
plugin is not working on our rundeck, version 2.6.9-1.
Here is the error:
2016-09-27 23:40:09,691 [quartzScheduler_Worker-27] ERROR grails.app.services.rundeck.services.NotificationService - Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"webhook_url":"https://hooks.slack.com/services/Obfuscatedstring"}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty].
com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty].
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.putRequestStream(SlackNotificationPlugin.java:221)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.invokeSlackAPIMethod(SlackNotificationPlugin.java:180)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:117)
at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:489)
at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:351)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:146)
at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:88)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:85)
at rundeck.services.ExecutionService$_saveExecutionState_closure59.doCall(ExecutionService.groovy:2157)
at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:2062)
at rundeck.quartzjobs.ExecutionJob$_saveState_closure4.doCall(ExecutionJob.groovy:486)
at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:424)
at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:496)
at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:146)
at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:74)
at com.codahale.metrics.Timer.time(Timer.java:99)
at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:73)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.putRequestStream(SlackNotificationPlugin.java:216)
... 18 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
... 19 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
at java.security.cert.PKIXParameters.(PKIXParameters.java:120)
at java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104)
... 19 more
'''
Thanks for ypur help
Good morning,
We have tried the plugin and works like a charm, however there are two things we were unable to do and would love to know if anyone else had the same issue and found a workaround that can share.
First problem:
We need one job to notify to two channels.
Second problem:
We need one job to notify only if rundeck variable "environment" it's "production".
Any thoughts?
A crash occurred while sending a notification
Version: rundeck-slack-incoming-webhook-plugin-0.11.jar
[2019-12-29 00:18:36.793] ERROR SlackNotificationPlugin --- [tp655013820-116] Got an exception from Freemarker: /etc/rundeck does not exist.
java.io.FileNotFoundException: /etc/rundeck does not exist.
at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:124)
at java.security.AccessController.doPrivileged(Native Method)
at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:121)
at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:107)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.<init>(SlackNotificationPlugin.java:145)
at sun.reflect.GeneratedConstructorAccessor506.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.createProviderInstanceFromType(BasePluggableProviderService.java:106)
at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.createProviderInstance(BasePluggableProviderService.java:59)
at com.dtolabs.rundeck.core.plugins.JarPluginProviderLoader.createProviderForClass(JarPluginProviderLoader.java:325)
at com.dtolabs.rundeck.core.plugins.JarPluginProviderLoader.load(JarPluginProviderLoader.java:194)
at com.dtolabs.rundeck.core.plugins.PluggableService.loadWithLoader(PluggableService.java:58)
at com.dtolabs.rundeck.core.plugins.PluginManagerService.loadProvider(PluginManagerService.java:146)
at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.providerOfType(BasePluggableProviderService.java:75)
at com.dtolabs.rundeck.core.common.ProviderService$providerOfType$3.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at com.dtolabs.rundeck.core.common.ProviderService$providerOfType$3.call(Unknown Source)
at com.dtolabs.rundeck.server.plugins.RundeckPluginRegistry$_listPluginDescriptors_closure8.doCall(RundeckPluginRegistry.groovy:496)
at sun.reflect.GeneratedMethodAccessor444.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
at groovy.lang.Closure.call(Closure.java:418)
at groovy.lang.Closure.call(Closure.java:434)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2125)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2110)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2151)
at org.codehaus.groovy.runtime.dgm$163.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
at com.dtolabs.rundeck.server.plugins.RundeckPluginRegistry.listPluginDescriptors(RundeckPluginRegistry.groovy:493)
at rundeck.services.PluginService.listPlugins(PluginService.groovy:442)
at rundeck.services.PluginService$listPlugins.call(Unknown Source)
at rundeck.services.NotificationService.listNotificationPlugins(NotificationService.groovy:118)
at rundeck.services.NotificationService$listNotificationPlugins.call(Unknown Source)
at rundeck.controllers.ScheduledExecutionController.show(ScheduledExecutionController.groovy:487)
at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at javax.servlet.FilterChain$doFilter.call(Unknown Source)
at org.rundeck.grails.plugins.securityheaders.RundeckSecurityHeadersFilter.doFilterInternal(RundeckSecurityHeadersFilter.groovy:67)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at grails.plugin.springsecurity.web.filter.GrailsHttpPutFormContentFilter.doFilterInternal(GrailsHttpPutFormContentFilter.groovy:54)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:64)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:494)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
at java.lang.Thread.run(Thread.java:748)
object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow
error detail
Request: /project/xxxxxxx/job/update/8e1c0439-ed70-41f1-b18d-66e18ff8063f?loglevel=INFO¬ifyFailureRecipients=&_notifySuccessAttach=&crontab.month._MAY=&crontab=%5Bmonth._MAY%3A%2C+month%3A%5B_MAY%3A%2C+_MAR%3A%2C+_APR%3A%2C+_DEC%3A%2C+_SEP%3A%2C+_FEB%3A%2C+_AUG%3A%2C+_OCT%3A%2C+_JAN%3A%2C+_JUN%3A%2C+_NOV%3A%2C+_JUL%3A%5D%2C+dayOfWeek._SAT%3A%2C+dayOfWeek%3A%5B_SAT%3A%2C+_FRI%3A%2C+_TUE%3A%2C+_SUN%3A%2C+_WED%3A%2C+_THU%3A%2C+_MON%3A%5D%2C+month._MAR%3A%2C+month._APR%3A%2C+dayOfWeek._FRI%3A%2C+month._DEC%3A%2C+dayOfWeek._TUE%3A%2C+dayOfWeek._SUN%3A%2C+month._SEP%3A%2C+month._FEB%3A%2C+month._AUG%3A%2C+month._OCT%3A%2C+dayOfWeek._WED%3A%2C+dayOfWeek._THU%3A%2C+dayOfWeek._MON%3A%2C+month._JAN%3A%2C+month._JUN%3A%2C+month._NOV%3A%2C+month._JUL%3A%5D&_notifyOnstartUrl=&crontab.dayOfWeek._SAT=&crontab.month._MAR=&nodeRankAttribute=&_everyDayOfWeek=¬ifyPlugin.onfailure.SlackNotification.config.webhook_url=https%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxxxxx¬ifyPlugin=%5Bonfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FTxxxxxxxxx%2C+onfailure%3A%5BSlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2F2FTxxxxxxxxx%2C+SlackNotification%3A%5Bconfig.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2F2FTxxxxxxxxx%2C+config%3A%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FT2FTxxxxxxxxx%5D%5D%2C+type%3ASlackNotification%2C+enabled.SlackNotification%3Atrue%2C+enabled%3A%5BSlackNotification%3Atrue%2C+_SlackNotification%3A%5D%2C+enabled._SlackNotification%3A%5D%2C+onstart.SlackNotification.config.webhook_url%3A%2C+onstart%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%2C+type%3ASlackNotification%2C+enabled._SlackNotification%3A%2C+enabled%3A%5B_SlackNotification%3A%5D%5D%2C+onstart.type%3ASlackNotification%2C+onfailure.type%3ASlackNotification%2C+onstart.enabled._SlackNotification%3A%2C+onfailure.enabled.SlackNotification%3Atrue%2C+onfailure.enabled._SlackNotification%3A%2C+onsuccess.SlackNotification.config.webhook_url%3A%2C+onsuccess%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%2C+type%3ASlackNotification%2C+enabled._SlackNotification%3A%2C+enabled%3A%5B_SlackNotification%3A%5D%5D%2C+onsuccess.type%3ASlackNotification%2C+onsuccess.enabled._SlackNotification%3A%5D¬ifyPlugin.onstart.SlackNotification.config.webhook_url=¬ifyStartRecipients=&orchestratorPlugin.subset.config.count=1&orchestratorPlugin=%5Bsubset.config.count%3A1%2C+subset%3A%5Bconfig.count%3A1%2C+config%3A%5Bcount%3A1%5D%5D%2C+maxPercentage.config.percent%3A33%2C+maxPercentage%3A%5Bconfig.percent%3A33%2C+config%3A%5Bpercent%3A33%5D%5D%5D&crontab.month._APR=&dayOfMonth=%3F&_notifyOnfailureEmail=&formInput=true&orig.notifyPlugin.onfailure.SlackNotification.config.webhook_url=https%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx&orig=%5BnotifyPlugin.onfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FTxxxxx%2C+notifyPlugin%3A%5Bonfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx%2C+onfailure%3A%5BSlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx%2C+SlackNotification%3A%5Bconfig.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2xxxxx%2C+config%3A%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxx%5D%5D%5D%2C+onsuccess.SlackNotification.config.webhook_url%3A%2C+onsuccess%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%5D%2C+onstart.SlackNotification.config.webhook_url%3A%2C+onstart%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%5D%5D%2C+orchestratorPlugin.maxPercentage.config.percent%3A%2C+orchestratorPlugin%3A%5BmaxPercentage.config.percent%3A%2C+maxPercentage%3A%5Bconfig.percent%3A%2C+config%3A%5Bpercent%3A%5D%5D%2C+subset.config.count%3A%2C+subset%3A%5Bconfig.count%3A%2C+config%3A%5Bcount%3A%5D%5D%5D%2C+notifyPlugin.onsuccess.SlackNotification.config.webhook_url%3A%2C+notifyPlugin.onstart.SlackNotification.config.webhook_url%3A%2C+orchestratorPlugin.subset.config.count%3A%5D&_sessionwf=true&doNodedispatch=true&workflow.keepgoing=false&workflow=%5Bkeepgoing%3Afalse%2C+strategy%3Anode-first%5D&crontab.dayOfWeek._FRI=&crontab.month._DEC=&orig.orchestratorPlugin.maxPercentage.config.percent=&crontabString=0+00+00+%3F+*+*+*&crontab.dayOfWeek._TUE=&crontab.dayOfWeek._SUN=&workflow.strategy=node-first&crontab.month._SEP=&SYNCHRONIZER_TOKEN=xxxxxxxx¬ifyPlugin.onstart.type=SlackNotification¬ifyPlugin.onfailure.type=SlackNotification&crontab.month._FEB=&_sessionopts=true&nodeExcludePrecedence=true&hour=00&SYNCHRONIZER_URI=%2Fproject%2Fxxxxx-api-dev%2Fjob%2Fedit%2F8e1c0439-ed70-41f1-b18d-66e18ff8063f&orchestratorPlugin.maxPercentage.config.percent=33&logOutputThreshold=&_everyMonth=&crontab.month._AUG=&crontab.month._OCT=&nodeThreadcount=1&retry=&scheduleEnabled=true&nodeRankOrderAscending=true&logOutputThresholdStatus=¬ifyPlugin.onstart.enabled._SlackNotification=¬ifySuccessUrl=&jobName=import+es3¬ifyPlugin.onfailure.enabled.SlackNotification=true&description=&_notifyOnfailureUrl=¬ified=true&crontab.dayOfWeek._WED=&orig.notifyPlugin.onsuccess.SlackNotification.config.webhook_url=&nodesSelectedByDefault=true&nodeKeepgoing=false¬ifyFailureUrl=&everyDayOfWeek=true&scheduled=false¬ifyStartSubject=&crontab.dayOfWeek._THU=&orig.notifyPlugin.onstart.SlackNotification.config.webhook_url=¬ifyStartUrl=&filter=tags%3Aec2&everyMonth=true¬ifySuccessRecipients=&logOutputThresholdAction=halt¬ifyPlugin.onfailure.enabled._SlackNotification=&orig.orchestratorPlugin.subset.config.count=&useCrontabString=false&multipleExecutions=false&minute=00&crontab.dayOfWeek._MON=¬ifyPlugin.onsuccess.SlackNotification.config.webhook_url=¬ifyFailureSubject=¬ifyPlugin.onsuccess.type=SlackNotification&_notifyOnstartEmail=&crontab.month._JAN=&groupPath=&_action_Update=Save&_notifyOnsuccessEmail=&orchestratorId=&crontab.month._JUN=&crontab.month._NOV=&_notifyOnsuccessUrl=¬ifyPlugin.onsuccess.enabled._SlackNotification=&_notifyFailureAttach=&executionEnabled=true¬ifySuccessSubject=&crontab.month._JUL=&timeout=&_sessionEditWFObject=Workflow%3A%28threadcount%3A1%29%7B+%5Bcommand%28+exec%3A+sudo+docker+pull+xxxxx%2Fxxxxx-api+keepgoingOnSuccess%3A+false%29%2C+command%28+exec%3A+docker+run+--rm+-t+xxxxx%2Fxxxxx-api+python+%2Fusr%2Fsrc%2Fapp%2Fexperimental%2Fimport_es3.py+10.81.10.177+keepgoingOnSuccess%3A+false%29%5D+%7D¬ifications=%7BeventTrigger%3Donfailure%2C+type%3DSlackNotification%2C+configuration%3D%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxxx Message: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow
Caused by: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow
Class: ScheduledExecutionController
At Line: [1733]
Code Snippet:
stack trace
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow
at rundeck.services.FrameworkService.getFrameworkProject(FrameworkService.groovy:204)
at rundeck.services.FrameworkService.getFrameworkPropertyResolver(FrameworkService.groovy:307)
at rundeck.services.NotificationService.validatePluginConfig(NotificationService.groovy:66)
at rundeck.services.ScheduledExecutionService.validatePluginNotification(ScheduledExecutionService.groovy:1710)
at rundeck.services.ScheduledExecutionService$__updateNotificationsData_closure47.doCall(ScheduledExecutionService.groovy:1880)
at rundeck.services.ScheduledExecutionService._updateNotificationsData(ScheduledExecutionService.groovy:1854)
at rundeck.services.ScheduledExecutionService._doupdate(ScheduledExecutionService.groovy:1623)
at rundeck.controllers.ScheduledExecutionController$_update_closure51.doCall(ScheduledExecutionController.groovy:1746)
at rundeck.controllers.ScheduledExecutionController.update(ScheduledExecutionController.groovy:1733)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1360)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:539)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:288)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:486)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:925)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:857)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
at java.lang.Thread.run(Thread.java:745)
First, thanks for this. I couldn't get the original plugin that you forked working at all.
Setting framework.plugin.Notification.SlackNotification.webhook_url
in framework.properties
does not seem to work. Setting it on the job works perfectly and I'll continue to use that, but it's just a bit annoying having to go copy the url from somewhere else every time.
When I look at the plugin in the plugin's section it shows
Slack Incoming WebHook URL
configure project: project.plugin.Notification.SlackNotification.webhook_url=value
configure framework: framework.plugin.Notification.SlackNotification.webhook_url=value
I set the url in the framework.properties
, but the job notification section does not seem to pre-populate, which is what I expected.
I didn't test project properties.
I am trying to make a few tweaks (eg, notify only under some conditions). I can get the slack to post, but I can't get any logs out of the plugin. I even added this as the first line in postNotifications()
SlackNotificationPlugin.LOG.info("SLACK Notify...");
And I get no logs from the plugin.
Does anybody know if something else needs to be enabled to get logs?
Appears either something happened in 3.0, or there is a problem in the templates.
The following has evaluated to null or missing:
==> executionData.dateEndedW3c [in template "slack-template-success.ftl" at line 35, column 29]
==> ${execution.succeededNodeListString} [in template "slack-template-success.ftl" at line 55, column 27]]
I am using the official docker image for rundeck, which does not create the same directory structure as the plugin expects. I have a workaround right now, but the hard-coded directory path throws.
This line throws when attempting to send a notification because the directory doesn't exist:
final TemplateLoader[] loaders = {
new FileTemplateLoader(new File("/etc/rundeck")), // Throws because dir doesn't exist
new ClassTemplateLoader(SlackNotificationPlugin.class, "/templates")
};
The log can be viewed here if you would like; it is mostly:
2019-02-18 06:25:01.857 ERROR --- [eduler_Worker-3] c.b.r.p.slack.SlackNotificationPlugin : Got an exception from Freemarker: /etc/rundeck does not exist.
java.io.FileNotFoundException: /etc/rundeck does not exist.
at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:124)
at java.security.AccessController.doPrivileged(Native Method)
at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:121)
at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:107)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.<init>(SlackNotificationPlugin.java:121)
at sun.reflect.GeneratedConstructorAccessor215.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
Workaround:
There is an /etc
folder in /home/rundeck
on the image, so in my Dockerfile where I am loading the plugin I created /home/rundeck/etc/rundeck
and symlinked it to /etc/rundeck
, and this solved the issue.
USER root
...
RUN mkdir /home/rundeck/etc/rundeck \
&& chown rundeck:rundeck /home/rundeck/etc/rundeck \
&& ln -s /home/rundeck/etc/rundeck /etc/rundeck
edit: it occurs to me that I can probably just make the actual directory, but at any rate, the directory doesn't exist in the docker image.
If you would like I can submit a PR to add this info the README. Otherwise it will probably take me a reallllly long time to figure out a PR to fix the issue.
Thanks for the work on this, it's a really useful plugin!
Hi,
Could anybody help me? I am trying to send a notification from rundeck that sits behind a proxy with authentication. Tried to add:
-Dhttps.proxyHost=example.proxy.com
-Dhttps.proxyPort=8080
-Dhttps.proxyUser=user
-Dhttps.proxyPassword=password
to
RDECK_JVM_SETTINGS=
No luck :/
2018-12-07 17:40:30.530 ERROR --- [eduler_Worker-1] rundeck.services.NotificationService : Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"slack_template":"","webhook_url_override":""}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentication Required"].
com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentication Required"].
Thanks
Hello,
I found this plugin and thought it would be awesome to use with our Mattermost server. I'm currently running Mattermost 3.2.0, Rundeck 2.6.8, and 0.6 of this plugin. I setup a test webhook and pointed a test Rundeck job at it. But I'm receiving an error
ERROR NotificationService: Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"webhook_url":"https://chat.example.com/hooks/oin3o77wf7bcifex39arjnw6uo"}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Connection reset].
I thought perhaps there was a network issue, but running a simple curl script that posts to that URL from the same Rundeck server works just fine.
Can someone offer a suggestion as to where I should be looking to perhaps troubleshoot this issue?
Thank you
With the same logic currently in use for the webhook the plugin should allow supplying a custom template at either the job level or the project level.
If none are specified then the current defaults can be used.
Hi Folks
I have copied the jar, I have added slack webhook url to below mentioned parameter.
"Slack Incoming WebHook Sends Rundeck Notifications to Slack"
Job is running fine, but I don't see any notifications on slack. Is there anything I am missing here ?
Thank you in advance
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.