将 Jenkins 的 Slack 通知发送到其他用户的私人频道
Send Slack notification from Jenkins into private channel of other users
我做了什么:
我设法将包含每个构建状态的通知发送到 我的 私人 Slack 频道。所以我配置了我的 Jenkins 和我的 Slack 应用程序。
我想做的事情:
正在向其他用户的私人 频道发送消息。
我尝试过的:
我在我的 Jenkinsfile 中添加了频道,并在 Jenkins 的 Slack App 中检查了它们,但没有成功。我想我必须创建像机器人一样的东西,它位于我要向其发送消息的特定频道中。非常确定 Jenkins 看不到该频道,因为它是另一个人的私人频道(显然)并且无法找到它。找不到此问题的解决方案。
非常感谢您的帮助,我想我浪费了很多时间试图找到答案。
我设置了构建管道以将 Slack 通知发送给提交作者。最大的挑战是映射到 Slack 用户名。我让团队中的每个开发人员更改他们的 git user.name 以匹配他们的 Slack 显示名称。这是我所知道的最直接的方法来完成这项工作。
git config --global user.name "Mona Lisa"
其中 "Mona Lisa" 是用户的 Slack 显示名称。
在 Jenkins 管道中,我使用 env.GIT_COMMIT_AUTHOR
来取回这个值。
请注意,环境变量在签出的任何内容的头部提供提交作者。对于多分支管道中的拉取请求,如果 PR 是 而不是 快进,则提交是合并将产生的内容,从而导致 'Jenkins' 的作者。所以,在那种情况下,你需要来自 HEAD~1
的作者
根据我的经验,将 Slack 消息发送到私人频道需要 OAuth。当 Jenkins 作为机器人添加到 Slack 并被邀请加入频道时,我才通过 slackSend()
成功发送到私人频道。
这是一个有效的示例管道:
#!/usr/bin/env groovy
pipeline {
agent {
node {
label "master"
}
}
stages {
stage('Send Notification') {
steps {
script {
def color = "${params.MESSAGE_STATUS}" == "GOOD"? "good" : "warning"
slackSend(color: "${color}", message: "${params.MESSAGE}", channel: "${params.CHANNEL}")
}
}
}
}
parameters {
string(name: 'MESSAGE', defaultValue: 'Hello')
string(name: 'CHANNEL', defaultValue: '#test_private')
choice(name: 'MESSAGE_STATUS', choices: ['GOOD', 'WARNING'], description: '')
}
}
由于 Slack 报告频道不存在,因此通过机器人等发送未成功。
我做了什么:
我设法将包含每个构建状态的通知发送到 我的 私人 Slack 频道。所以我配置了我的 Jenkins 和我的 Slack 应用程序。
我想做的事情:
正在向其他用户的私人 频道发送消息。
我尝试过的:
我在我的 Jenkinsfile 中添加了频道,并在 Jenkins 的 Slack App 中检查了它们,但没有成功。我想我必须创建像机器人一样的东西,它位于我要向其发送消息的特定频道中。非常确定 Jenkins 看不到该频道,因为它是另一个人的私人频道(显然)并且无法找到它。找不到此问题的解决方案。
非常感谢您的帮助,我想我浪费了很多时间试图找到答案。
我设置了构建管道以将 Slack 通知发送给提交作者。最大的挑战是映射到 Slack 用户名。我让团队中的每个开发人员更改他们的 git user.name 以匹配他们的 Slack 显示名称。这是我所知道的最直接的方法来完成这项工作。
git config --global user.name "Mona Lisa"
其中 "Mona Lisa" 是用户的 Slack 显示名称。
在 Jenkins 管道中,我使用 env.GIT_COMMIT_AUTHOR
来取回这个值。
请注意,环境变量在签出的任何内容的头部提供提交作者。对于多分支管道中的拉取请求,如果 PR 是 而不是 快进,则提交是合并将产生的内容,从而导致 'Jenkins' 的作者。所以,在那种情况下,你需要来自 HEAD~1
的作者根据我的经验,将 Slack 消息发送到私人频道需要 OAuth。当 Jenkins 作为机器人添加到 Slack 并被邀请加入频道时,我才通过 slackSend()
成功发送到私人频道。
这是一个有效的示例管道:
#!/usr/bin/env groovy
pipeline {
agent {
node {
label "master"
}
}
stages {
stage('Send Notification') {
steps {
script {
def color = "${params.MESSAGE_STATUS}" == "GOOD"? "good" : "warning"
slackSend(color: "${color}", message: "${params.MESSAGE}", channel: "${params.CHANNEL}")
}
}
}
}
parameters {
string(name: 'MESSAGE', defaultValue: 'Hello')
string(name: 'CHANNEL', defaultValue: '#test_private')
choice(name: 'MESSAGE_STATUS', choices: ['GOOD', 'WARNING'], description: '')
}
}
由于 Slack 报告频道不存在,因此通过机器人等发送未成功。