首页 > 解决方案 > 构建失败时从 Jenkins 管道通知 slack 用户

问题描述

我正在从 Jenkins 管道向通道发送 slack 通知,我已经安装了 Jenkins slack 插件https://plugins.jenkins.io/slack并配置了 Jenkins slack 应用程序以在构建失败或成功时向通道发送通知。我想通知用户说构建失败,而不是只向松弛通道发送失败消息。例如:@user error in deploying following project

我从 jenkins slack 插件中提到了这个步骤

def userIds = slackUserIdsFromCommitters()
def userIdsString = userIds.collect { "<@$it>" }.join(' ')
post {
        // Send the build result to slack channel
        success {
          slackSend (color:'good', message: "<@$userIds>Successfully deployed")
        }
        failure {
            slackSend (color:'danger', message: "<@$userIds>Error in build ${env.JOB_NAME}")
        }
    }

我得到$userIds变量的空值。

在此处输入图像描述

标签: jenkinsgroovy

解决方案


如果它仍然与某人相关,我这样做了:

........
    }
    post {
        always {
            script {
                env.GIT_COMMIT_MSG = sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT} | head -n1', returnStdout: true).stripIndent().trim()
                env.GIT_AUTHOR = sh (script: 'git log -1 --pretty=%ae ${GIT_COMMIT} | awk -F "@" \'{print $1}\' | grep -Po "[a-z]{1,}" | head -n1', returnStdout: true).trim()
                slackSend(
                    color: color_slack_msg(),
                    message: """
                        *${currentBuild.currentResult}:* Job `${env.JOB_NAME}` build `${env.BUILD_DISPLAY_NAME}` by <@${env.GIT_AUTHOR}>
                        Build commit: ${GIT_COMMIT}
                        Last commit message: '${env.GIT_COMMIT_MSG}'
                        More info at: ${env.BUILD_URL}
                        Time: ${currentBuild.durationString.minus(' and counting')}
                        """.stripIndent().trim(),
                    channel: 'slack-channel',
                    tokenCredentialId: 'SlackToken'
                )
            }
            cleanWs()
        }
    }
}

def color_slack_msg() {
    switch(currentBuild.currentResult) {
    case "SUCCESS":
        return "good"
        break
    case "FAILURE":
    case "UNSTABLE":
        return "danger"
        break
    default:
        return "warning"
        break
    }
}

如果mail = login in slack,这将起作用


推荐阅读