Jenkins Slack 集成
Jenkins Slack integration
我想使用 Jenkins 中的 Slack 插件将通知 ping 到 Slack 频道。
当我测试连接时 Jenkins 说成功,但我没有在我的 Slack 频道中收到任何通知。
有什么已知问题吗?
如何让 Jenkins 向 Slack 发送通知?
我认为您应该在 Jenkins 中添加 post-build 操作 "Slack Notification"。请看下图
您确定配置正确吗?
在构建配置中(不要忘记#字符)
在常规配置中
将 Jenkins 作业配置为 post 在松弛通道上运行有两个步骤。
- 转到 jenkins 作业配置,并在您希望 ping 松弛通道的每个作业上添加一个 post-build 操作。
- 接下来,再次在作业配置下,您必须在每个作业上配置您希望在哪些情况下发送松弛通知:(true - false)
f.e.
如果您必须配置大量的 Jenkins 作业,您可以只手动配置其中一个并验证它是否正常工作。然后检查此 Jenkins 作业的 config.xml 以查找自动生成的 xml 元素以用于 slack 插件首选项,并使用正则表达式或 xslt 将这些配置应用于所有 Jenkins 作业。 在这种情况下,您必须重新加载 Jenkins 配置才能应用作业配置更新。 ("Manage Jenkins" / "Reload Configuration from Disk")
先决条件:
- 在 Jenkins 中安装 slack 插件。
- 在您的松弛域中获取 Jenkins CI 集成令牌。
- 进入 Jenkins "Manage Jenkins" / "Configure System"。在那里你必须配置 "Global Slack Notifier Setting".
我没有使用 Slack Notification,因为我想自定义 style/state/message,等等。所以我写了一个名为 send_slack_notification
的 job
。每次我想通知 slack API 我只是在构建后调用这个工作。
这是 "Execute Shell" 中的代码,我使用 curl
、sed
和 jsawk
来完成这项工作:
# 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].*//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\ \([^\"]*\).*//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
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>
除了 'failure' 配置中的松弛连接测试,我什么也得不到。我可以使用同一个框中的 python,所以我不知道问题出在哪里,所以我可能只使用这个简单的脚本。
我考虑将它添加到这里是为了社区的更大利益。这就是您获得集成令牌的方式
詹金斯说明
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.
我遇到过类似的问题。
当我取消选中时它对我有用 "is Bot User?"
在控制台中使用 'jenkins' 启动 Jenkins,而不是使用 brew demon。
也许这有帮助:)
你好^__^
如果您想使用 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
我想使用 Jenkins 中的 Slack 插件将通知 ping 到 Slack 频道。
当我测试连接时 Jenkins 说成功,但我没有在我的 Slack 频道中收到任何通知。
有什么已知问题吗?
如何让 Jenkins 向 Slack 发送通知?
我认为您应该在 Jenkins 中添加 post-build 操作 "Slack Notification"。请看下图
您确定配置正确吗?
在构建配置中(不要忘记#字符)
在常规配置中
将 Jenkins 作业配置为 post 在松弛通道上运行有两个步骤。
- 转到 jenkins 作业配置,并在您希望 ping 松弛通道的每个作业上添加一个 post-build 操作。
- 接下来,再次在作业配置下,您必须在每个作业上配置您希望在哪些情况下发送松弛通知:(true - false) f.e.
如果您必须配置大量的 Jenkins 作业,您可以只手动配置其中一个并验证它是否正常工作。然后检查此 Jenkins 作业的 config.xml 以查找自动生成的 xml 元素以用于 slack 插件首选项,并使用正则表达式或 xslt 将这些配置应用于所有 Jenkins 作业。 在这种情况下,您必须重新加载 Jenkins 配置才能应用作业配置更新。 ("Manage Jenkins" / "Reload Configuration from Disk")
先决条件:
- 在 Jenkins 中安装 slack 插件。
- 在您的松弛域中获取 Jenkins CI 集成令牌。
- 进入 Jenkins "Manage Jenkins" / "Configure System"。在那里你必须配置 "Global Slack Notifier Setting".
我没有使用 Slack Notification,因为我想自定义 style/state/message,等等。所以我写了一个名为 send_slack_notification
的 job
。每次我想通知 slack API 我只是在构建后调用这个工作。
这是 "Execute Shell" 中的代码,我使用 curl
、sed
和 jsawk
来完成这项工作:
# 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].*//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\ \([^\"]*\).*//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
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>
除了 'failure' 配置中的松弛连接测试,我什么也得不到。我可以使用同一个框中的 python,所以我不知道问题出在哪里,所以我可能只使用这个简单的脚本。
我考虑将它添加到这里是为了社区的更大利益。这就是您获得集成令牌的方式
詹金斯说明
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.
我遇到过类似的问题。
当我取消选中时它对我有用 "is Bot User?"
在控制台中使用 'jenkins' 启动 Jenkins,而不是使用 brew demon。
也许这有帮助:) 你好^__^
如果您想使用 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