【问题标题】:Jenkins Slack integration詹金斯松弛集成
【发布时间】:2015-05-16 06:27:38
【问题描述】:

我想使用 Jenkins 中的 Slack 插件将通知发送到 Slack 频道。

当我测试连接时,Jenkins 说成功,但我的 Slack 频道中没有收到任何通知。

是否有任何已知问题?

如何让 Jenkins 向 Slack 发送通知?

【问题讨论】:

  • 您是否在构建后操作中为(每个)构建作业配置了通道?
  • 你也可以试试像CatLight这样的构建通知器。它产生的噪音比聊天通知要少,并且总是在托盘中显示当前的作业状态。

标签: jenkins jenkins-plugins slack-api


【解决方案1】:

我认为您应该在 Jenkins 中添加构建后操作“Slack Notification”。请看下图

【讨论】:

  • 我的一位用户遇到了类似的问题。我没想过要检查这是否完成。感谢您指出这一点。
  • 在将其添加为构建步骤之前,配置选项实际上并不适用,这相当令人困惑。这些选项最初应该是隐藏的,然后出现在构建步骤面板中。
  • 有没有办法修改机器人的消息以包含@channel@here 以紧急通知团队?
【解决方案2】:

您确定您的配置正确吗? 在构建配置中(不要忘记 # 字符)

在一般配置中

【讨论】:

  • 集成令牌是频道的那个,还有更高的吗?对于团队或类似的东西?
  • 它对我有用,然后有一天它停止了。可能令牌已过期。有人知道我可以从哪里获得集成令牌吗?
  • 有人知道 Slack 集成令牌指的是什么吗?
  • @VirtualProdigy 我相信集成令牌是您在团队的 Slack 配置中启用扩展时生成的令牌。
  • @andrewdcato 我会试一试的。谢谢
【解决方案3】:

将 Jenkins 作业配置为发布到 slack 频道有两个步骤。

  1. 转到 jenkins 作业配置,并为您希望 ping 松弛通道的每个作业添加构建后操作。

  1. 接下来,再次在作业配置下,您必须在每个作业上配置您希望发送松弛通知的情况:(true - false) f.e.

如果您必须配置大量 Jenkins 作业,您可以手动配置其中一个并验证它是否正常工作。然后检查此 Jenkins 作业的 config.xml 以查找 Slack 插件首选项的自动生成的 xml 元素,并使用 regex 或 xslt 将这些配置应用于所有 Jenkins 作业。 在这种情况下,您必须重新加载 Jenkins 配置才能应用作业配置更新。(“管理 Jenkins”/“从磁盘重新加载配置”)

先决条件:

  • 在 Jenkins 中安装 slack 插件。
  • 在您的 slack 域中获取 Jenkins CI 集成令牌。
  • 进入 Jenkins“管理 Jenkins”/“配置系统”。您必须在此处配置“全局 Slack 通知程序设置”。

【讨论】:

    【解决方案4】:

    我没有使用 Slack 通知,因为我想自定义样式/状态/消息等。所以我写了一个名为 send_slack_notificationjob。每次我想通知 slack API 时,我都会在构建后调用此作业。

    这是“Execute Shell”中的代码,我使用了curlsedjsawk 来完成这项工作:

    # URL to get the built info json
    # will get "http://JENKINS_PATH/job/JOB_NAME/97/api/json"
    NEW_URL="http://jks_username:jks_password@"$(echo ${BUILD_URL} | sed -r 's/http:\/\///g')"/api/json"
    
    # Cut the JOB_NAME part from BUILD_URL
    JOB_NAME=$(echo ${BUILD_URL} | sed -n 's/.*\/job\/\(.*\)\/[0-9].*/\1/p' | sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b")
    
    # Get the built info json
    JSON=$(curl $NEW_URL)
    
    STATUS=$(echo $JSON | /usr/local/bin/jsawk "return this.result")
    BUILD_INFO=$(echo $JSON | /usr/local/bin/jsawk "return this.displayName")
    TIME=$(echo $JSON | /usr/local/bin/jsawk "return this.duration")
    TIME=$(echo "scale=4; $TIME/1000" | bc -l)
    
    # Cut the username
    USER=$(echo $JSON | /usr/local/bin/jsawk "return this" | sed -n "s/.*Started\ by\ \([^\"]*\).*/\1/p")
    
    # Customize the message sending to slack
    TEXT=$JOB_NAME" Built by "$USER", it took "$TIME" seconds."
    
    # Send notification using Slack API
    # will send to https://hooks.slack.com/services/BLABLABLA/BLABLABLA
    curl -X POST -H 'Content-type: application/json' --data '{"channel": "#production_info","username": "jenkins-bot","icon_emoji": ":lol:","text": "'"$TEXT"' (<'"$BUILD_URL"'|Open>)", "attachments": [{"color": "#36a64f", "fields": [{"title":"UPDATE INFO","value":"'"$BUILD_INFO"'","short":true},{"title":"RESULT","value":"'"$STATUS"'","short":true}]}]}' https://hooks.slack.com/services/BLABLABLA/BLABLABLA/BLABLABLABLABLABLA
    

    【讨论】:

    • 我想知道如何确定要发布到的 URL。我看到在 slack-plugin 配置中它提供了一个 BASE_URL 和 INTEGRATION_TOKEN 这些可以用来确定https://hooks.slack.com/services/BLABLABLA/BLABLABLA/BLABLABLABLABLABLA的替换吗?
    • nm - 弄清楚了,它们是串联的。 curl -v -X POST -H 'Content-type: application/json' --data '{ "text": "test msg" }' $BASE_URL/$INTEGRATION_TOKEN
    【解决方案5】:

    我想在这里添加它是为了社区的更大利益。这就是您获取集成令牌的方式

    Jenkins 说明

    Get a Slack account: https://slack.com/
    Configure the Jenkins integration: https://my.slack.com/services/new/jenkins-ci
    Install this plugin on your Jenkins server
    Configure it in your Jenkins job and add it as a Post-build action.
    

    https://github.com/jenkinsci/slack-plugin

    【讨论】:

      【解决方案6】:
      import os
      import sys
      from slacker import Slacker
      import base64
      
      def main():
          myPass=sys.argv[1]
          msgStr= sys.argv[2]
          channel = sys.argv[3]
      
          slack = Slacker(myPass)
          slack.chat.post_message(channel, msgStr)
          print msgStr
      
      if __name__ == '__main__':
          main()    
      

      python slack.py &lt;token&gt; &lt; message str &gt; &lt;#channel&gt;

      除了配置中的松弛连接测试“失败”之外,我什么也得不到。我可以在同一个盒子中使用 python,所以我不知道问题是什么,所以我可以使用这个简单的脚本。

      【讨论】:

        【解决方案7】:

        如果你想使用 Jenkins 声明式管道接收通知,你可以安装 Slack 插件,然后在管道中这样使用它:

            stage('Clone sources') {
                steps {
                    slackSend (channel: "#mychannel", color: '#FFFF00', message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
                    git credentialsId: 'git_credentials', poll: false, branch: 'develop', url: 'https://mysource.com/mysimplenodejsexample.git'
                }        
            }
        

        结果:

        您当然可以自定义您的消息。完整示例在:

        https://pillsfromtheweb.blogspot.com/2020/05/send-notifications-to-slack-from.html

        【讨论】:

          【解决方案8】:

          我也有类似的问题。

          当我取消选中“是机器人用户?”时它对我有用

          不过,使用 'jenkins' 在控制台中启动 Jenkins,而不是使用 brew demo。

          也许这有帮助:) 问候^__^

          【讨论】:

          • 嗯,有 2 种不同的方式来启动 Jenkins。仅使用 brew 和命令“jenkins”。 (我正在使用 MAC 顺便说一句)并且在 CI Server Jenkins 内的 Slack 配置中,有一个选项 callend 'is Bot USer?“当我取消选中它时,它对我有用。可能是我没有开始的原因Jenkins 与 brew 抱歉更好 XD?
          猜你喜欢
          • 1970-01-01
          • 2018-05-07
          • 2020-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-01
          • 1970-01-01
          相关资源
          最近更新 更多