Trabajo de Jenkins Pipeline; cotización adecuada para slackEnviar paso

11

Este es probablemente un error del 100% del usuario, pero no puedo obtener un trabajo de canalización para usar una variable como el nombre del canal en un paso slackSend.

Esto usa el complemento Slack y el complemento Build User Vars . Estoy tratando de usar BUILD_USER_FIRST_NAMEpara identificar a qué canal volver Slack (es decir, el que comienza la compilación debería ser el que reciba el mensaje).

Llegué a la mitad con este artículo sobre cómo usar el complemento de usuario de compilación en un trabajo de canalización, pero sustituir la variable me está tropezando.

La parte relevante del trabajo se ve así;

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")
    }

}

He intentado lo siguiente en lugar del bit de canal, todos han fallado con Slack post may have failed. Response: Invalid channel specifiederrores indeterminados .

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

La salida esperada es que resolvería channel: '@Alex',

¿Cuál es la sintaxis adecuada?

Alex
fuente

Respuestas:

6

En Groovy, debe usar comillas dobles para obtener la interpolación de cadenas:

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

Probablemente también pueda hacer algo como esto para evitarlo por completo y tener menos duplicación:

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

slackSend (channel: name //etc.
Michael Pereira
fuente