web-dev-qa-db-fra.com

Intégration Jenkins/Slack

Je dois configurer Jenkins pour envoyer des notifications sur nos #builds de canaux Slack . J'ai configuré l'intégration Jenkins CI dans Slack. En conséquence, j'ai un jeton "abcdefgh666" et lorsque je développe les "Instructions de configuration", je peux voir que notre domaine d'équipe est "mysuperteam". Nous nous connectons à slack avec l’url http://mysuperteam.slack.com

Je suis bloqué à l'étape 3. Sur Slack doc , la capture d'écran est la suivante:

 slack screen

Mais dans notre version de Jenkins, la vue ressemble à ceci:

 my screen

Évidemment, le bouton Tester la connexion renvoie toujours un échec. Dans les journaux Jenkins, j'ai plusieurs fois ceci:

Mar 30, 2017 2:14:38 PM WARNING jenkins.plugins.slack.StandardSlackService publish
Error posting to Slack
Java.lang.IllegalStateException: Target Host is null
    at org.Apache.http.util.Asserts.notNull(Asserts.Java:46)
    at org.Apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.Java:125)
    at org.Apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.Java:185)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:82)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:106)
    at jenkins.plugins.slack.StandardSlackService.publish(StandardSlackService.Java:126)
    at jenkins.plugins.slack.SlackNotifier$DescriptorImpl.doTestConnection(SlackNotifier.Java:510)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.Java:335)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.Java:175)
    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.Java:108)
    at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.Java:124)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:746)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:876)
    at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.Java:236)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:746)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:876)
    at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.Java:236)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:746)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:876)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:649)
    at org.kohsuke.stapler.Stapler.service(Stapler.Java:238)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:790)
    at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:812)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1669)
    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.Java:135)
    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.Java:126)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.Java:80)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:84)
    at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.Java:51)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.Java:117)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.Java:125)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.Java:142)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.Java:271)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.Java:93)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.Java:249)
    at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.Java:67)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:87)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.Java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.Java:171)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.Java:49)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.Java:82)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.Java:30)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
    at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:585)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:143)
    at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:553)
    at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:223)
    at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1127)
    at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:515)
    at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:185)
    at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:1061)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:141)
    at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:97)
    at org.Eclipse.jetty.server.Server.handle(Server.Java:499)
    at org.Eclipse.jetty.server.HttpChannel.handle(HttpChannel.Java:311)
    at org.Eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.Java:257)
    at org.Eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.Java:544)
    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.Java:77)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
    at Java.lang.Thread.run(Thread.Java:745)

J'ai essayé d'utiliser le menu des identifiants pour éviter de mettre le jeton directement, j'ai essayé de mettre "slack.com" dans le champ "URL de base", j'ai essayé de cocher ou décocher la case "Est-ce que l'utilisateur de bot est?" et j'ai essayé de mettre " http://mysuperteam.slack.com " dans le champ "URL de base".

Ma configuration est-elle correcte? Qu'est-ce qui pourrait empêcher Jenkins de se connecter à Slack?

10
Antwane

Enfin, le problème était un bug temporaire. Notre configuration était valide et les tests effectués quelques jours plus tard semblent bien fonctionner.

Nous avons rempli les entrées Team Subdomain et Integration Token avec les informations trouvées dans notre page de gestion des applications Slack. De plus, nous avons défini le nom de la variable Channel où Jenkins enverra des notifications:

 global config

Nous n'avons rien mis dans Slack Webhooks Settings:

 webhooks

Important: N'oubliez pas de sauvegarder vos paramètres avant de cliquer sur le bouton "Tester la connexion".

Versions: Jenkins 2.46/Slack Notification Plugin 2.2. Informations sur les paramètres disponibles sur https://github.com/jenkinsci/slack-plugin

4
Antwane

laissez "baseUrl" vide, et sauvegardez-le avant le test via "TestConnection".

11
Taejun Jang

J'ai eu le même problème et ai découvert que je devais créer un Webhook entrant sur l'interface slack ( https://slack.com/apps/A0F7XDUAZ-incoming-webhooks )
Mais je ne peux toujours pas le faire fonctionner ...

edit: j’ai peut-être mal interprété les instructions d’installation de https://github.com/jenkinsci/slack-plugin , quoi qu’il en soit, il n’est pas à jour.

1
Banibal

J'exécute Jenkins dans l'environnement Windows en tant que service. Notre Jenkins est derrière le pare-feu et le proxy du corprate, donc je recevais une erreur "407 - Proxy Auth Required". Résolu ce problème en démarrant le service Jenkins en utilisant mon ID de domaine. 

0
Karthik