这可能是100%用户错误,但是我无法在slackSend步骤中获得将变量用作通道名称的管道作业。

这同时使用了Slack插件和Build User Vars插件。我正在尝试使用BUILD_USER_FIRST_NAME来识别Slack退回到哪个通道(即,开始构建的通道应该是获取消息的通道)。

本文的中途介绍了如何在管道作业中使用构建用户插件,但是替换变量让我大跌眼镜。

工作的相关部分看起来像这样;

stage ('message') {

    wrap([$class: 'BuildUser']) {

        sh "printf '%s' ${BUILD_USER_FIRST_NAME} > name.txt"

    }

    archiveArtifacts artifacts: 'name.txt'
    name = readFile('name.txt')
    echo "name is $name" //works fine, I get Alex

    if ( "$output" != null ) {
        slackSend (channel: '@$name', color: '#36A64F', message: "Job succeeded")
    } else {
        slackSend (channel: '@$name', color: '#36A64F', message: "Job failed")
    }

}


我已经尝试了以下方法来代替通道位,都有失败并出现不确定的Slack post may have failed. Response: Invalid channel specified错误。

channel: '@${name}',
channel: '@" + ${name} + "',
channel: '@"${name}"',


预期的输出是它将解析为channel: '@Alex',

正确的语法是什么?

#1 楼

在Groovy中,您必须使用双引号来获取字符串插值:

    if ( "$output" != null ) {
        slackSend (channel: "@${name}", color: '#36A64F', message: "Job succeeded")
    } else {
        slackSend (channel: "@${name}", color: '#36A64F', message: "Job failed")
    }


您也可以做这样的事情来完全避免它并减少重复:

name = '@' + readFile('name.txt')

slackSend (channel: name //etc.