将 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 报告频道不存在,因此通过机器人等发送未成功。