Дженкинс Трубопроводная работа; правильное цитирование для шага slackSend

11

Вероятно, это ошибка пользователя на 100%, но я не могу заставить конвейерное задание использовать переменную в качестве имени канала на шаге slackSend.

При этом используется как натяжной плагин и Сложение пользователя Варс Plugin . Я пытаюсь использовать, 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',

Какой правильный синтаксис?

Alex
источник

Ответы:

6

В 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.
Майкл Перейра
источник