Jenkins Pipeline Job; richtiges Zitat für den Schritt slackSend

11

Dies ist wahrscheinlich ein 100% iger Benutzerfehler, aber ich kann keinen Pipeline-Job dazu bringen, eine Variable als Kanalnamen in einem slackSend-Schritt zu verwenden.

Dies verwendet sowohl das Slack-Plugin als auch das Build User Vars-Plugin . Ich versuche zu BUILD_USER_FIRST_NAMEidentifizieren, auf welchen Kanal Slack zurückgreifen soll (dh derjenige, der den Build startet, sollte derjenige sein, der die Nachricht erhält).

Mit diesem Artikel über die Verwendung des Build-Benutzer-Plugins in einem Pipeline-Job bin ich auf halbem Weg angekommen, aber das Ersetzen der Variablen löst mich aus.

Der relevante Teil des Jobs sieht so aus.

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

}

Ich habe Folgendes anstelle des Kanalbits versucht, alle sind mit unbestimmten Slack post may have failed. Response: Invalid channel specifiedFehlern fehlgeschlagen .

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

Die erwartete Ausgabe wird aufgelöst channel: '@Alex',

Was ist die richtige Syntax?

Alex
quelle

Antworten:

6

In Groovy müssen Sie doppelte Anführungszeichen verwenden, um die Zeichenfolgeninterpolation zu erhalten:

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

Sie können wahrscheinlich auch so etwas tun, um es vollständig zu vermeiden und weniger Duplikate zu haben:

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

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