Trabalho no Jenkins Pipeline; citação adequada para o slackSend passo


11

Provavelmente, esse erro é 100% do usuário, mas não consigo um trabalho de pipeline para usar uma variável como o nome do canal em uma etapa do slackSend.

Isso usa o plug - in Slack e o plug - in Build User Vars . Estou tentando usar BUILD_USER_FIRST_NAMEpara identificar em qual canal o Slack retornará (ou seja, aquele que inicia a compilação deve ser o único a receber a mensagem).

Cheguei no meio do caminho com este artigo sobre como usar o plug-in de usuário de compilação em um trabalho de pipeline, mas substituir a variável está me atrapalhando.

A parte relevante do trabalho se parece com isso;

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

}

Eu tentei o seguinte no lugar do bit do canal, todos falharam com Slack post may have failed. Response: Invalid channel specifiederros indeterminados .

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

O resultado esperado é que ele resolveria channel: '@Alex',

Qual é a sintaxe adequada?

Respostas:


6

No Groovy, você precisa usar aspas duplas para obter a interpolação de string:

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

Você também pode provavelmente fazer algo assim para evitá-lo completamente e ter menos duplicação:

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

slackSend (channel: name //etc.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.