23

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

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

是否有任何已知问题?

如何让 Jenkins 向 Slack 发送通知?

4

8 回答 8

17

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

在此处输入图像描述

于 2015-06-09T06:16:03.450 回答
12

你确定你有一个正确的配置。在构建配置中(不要忘记 # 字符) 在此处输入图像描述

一般配置 在此处输入图像描述

于 2015-06-09T09:01:03.637 回答
7

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

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

在此处输入图像描述

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

在此处输入图像描述

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

先决条件:

  • 在 Jenkins 中安装 slack 插件。
  • 在您的 slack 域中获取 Jenkins CI 集成令牌。
  • 进入 Jenkins“管理 Jenkins”/“配置系统”。您必须在那里配置“全局 Slack 通知程序设置”。
于 2016-02-12T14:22:49.483 回答
5

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

这是我使用的“Execute Shell”中的代码,用于完成curl这项工作:sedjsawk

# 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
于 2016-07-22T03:18:42.453 回答
4

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

詹金斯说明

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

于 2016-10-21T00:22:15.300 回答
1

如果你想使用 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

于 2020-05-05T12:24:26.620 回答
1
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 <token> < message str > <#channel>

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

于 2016-10-18T15:49:49.787 回答
0

我有类似的问题。

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

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

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

于 2017-07-26T17:50:39.770 回答