2017-03-08 1 views
0

Angesichts der folgende Pipeline:CHANGE_AUTHOR_EMAIL und CHANGE_ID Umgebungsvariablen zurückgeben „Keine solche Eigenschaft: ...“

stages { 
    stage ("Checkout SCM") { 
     steps { 
      checkout scm 

      sh "echo ${CHANGE_AUTHOR_EMAIL}" 
      sh "echo ${CHANGE_ID}" 
     } 
    } 
} 

Warum diese Variablen nicht um einen Wert zu lösen und zur Verfügung stellen?

Schließlich möchte ich diese Umgebungsvariablen verwenden, um eine E-Mail senden und eine Pull-Anforderung zusammen:

post { 
    failure { 
     emailext (
     attachLog: true, 
     subject: '[Jenkins] $PROJECT_NAME :: Build #$BUILD_NUMBER :: build failure', 
     to: '$CHANGE_AUTHOR_EMAIL', 
     replyTo: '[email protected]', 
     body: '''<p>You are receiving this email because your pull request was involved in a failed build. Check the attached log file, or the console output at: $BUILD_URL to view the build results.</p>''' 
    ) 
    } 
} 

und

sh "curl -X PUT -d '{\'commit_title\': \'Merge pull request\'}' <git url>/pulls/${CHANGE_ID}/merge?access_token=<token>" 

Seltsamer, $PROJECT_NAME, $BUILD_NUMBER, $BUILD_URL arbeiten ...


Update: Dies ist möglicherweise ein offener Fehler ... https://issues.jenkins-ci.org/browse/JENKINS-40486 :-(
Gibt es eine Problemumgehung, um diese Werte zu erhalten?

Antwort

2

Für alle, die auf diese stoßen können, sind diese Variablen nur verfügbar, wenn das Kontrollkästchen für Build-Ursprungs-PRs (mit Basiszweig zusammengeführt) überprüft wurde (dies ist in einem Multi-Zweig-Job).

Weitere in dieser anderen Ausgabe Jenkins: https://issues.jenkins-ci.org/browse/JENKINS-39838

+0

wo ist dieses Kontrollkästchen? Ich kann es nicht in meinem Multi-Filial-Job finden – SILENCE

+0

Das Plug-in wurde seither aktualisiert und diese Antwort ist nicht so gültig. Brauchen Sie, mich zu aktualisieren, damit ich die Antwort aktualisieren konnte –

3

Sie müssen sich über vorsichtig sein, wie Sie auf Umgebungsvariablen beziehen sich je nachdem, ob es Shell oder Groovy-Code und wie Sie zitieren.

Wenn Sie sh "echo ${CHANGE_ID}" tun, was tatsächlich passiert ist, dass Groovy zuerst den String interpolieren wird, durch ${CHANGE_ID} mit der Groovy Eigenschaft ersetzt CHANGE_ID, und das ist, wo Ihre Fehlermeldung aus ist. In Groovy sind die Umgebungsvariablen in env verpackt.

Wenn Sie direkt aus Ihrem Shell-Skript auf die Umgebungsvariablen verweisen möchten, müssen Sie entweder mit env interpolieren, einfache Anführungszeichen verwenden oder das Dollarzeichen schließen. Alles Folgende sollte funktionieren:

sh 'echo $CHANGE_ID' 
sh "echo \$CHANGE_ID" 
sh "echo ${env.CHANGE_ID}" 
+0

Danke tolle Infos, danke! –

+0

Wie sieht es bei der Verwendung von Variablen aus, die nicht in SH-Skripten enthalten sind, wie zum Beispiel in einem internen E-Mail-Plug-In, einem Slack-Plug-In und ähnlichen? Ich habe die Frage mit einem Beispiel für emailtext aktualisiert. –

+0

In diesem Fall bekomme ich "Fehler beim Senden an die folgenden INVALID-Adressen: $ CHANGE_AUTHOR_EMAIL" –

Verwandte Themen