2017-03-08 80 views
0

鑑於以下管道:CHANGE_AUTHOR_EMAIL和CHANGE_ID環境變量返回「沒有這樣的屬性:......」

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

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

爲什麼這些變量無法解析,並提供價值?

最後,我想用這些環境變量來發送電子郵件和合並拉請求:

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

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

奇怪的是,$PROJECT_NAME$BUILD_NUMBER$BUILD_URL做的工作......


更新:這可能是一個開放的bug ... https://issues.jenkins-ci.org/browse/JENKINS-40486 :-(
是否有任何解決方法來獲取這些值?

回答

2

對於任何可能遇到此問題的人,只有在選中了構建原始PR(與基本分支合併)複選框(此屬於多分支作業)後,這些變量纔可用。

查看更多在這個其他詹金斯問題:https://issues.jenkins-ci.org/browse/JENKINS-39838

+0

這個複選框在哪裏?我無法在我的多分支作業中找到它 – SILENCE

+0

插件已被更新,此答案不是有效的。需要更新自己,所以我可以更新答案 –

3

你需要小心你如何引用環境變量取決於它是否是殼或Groovy代碼,以及你是如何引用。

當你做sh "echo ${CHANGE_ID}",實際發生的事情是,Groovy會先插字符串,通過與Groovy的財產CHANGE_ID更換${CHANGE_ID},而這也正是你的錯誤信息是從。在Groovy中,環境變量包裝在env中。

如果要直接從shell腳本引用環境變量,則必須使用env插入,使用單引號或轉義美元符號。以下所有方式應該可以工作:

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

感謝偉大的信息,謝謝! –

+0

如何使用不在sh腳本中的變量,如emailext插件,slack插件等內容?我已經用emailext的一個例子更新了這個問題。 –

+0

在這種情況下,我收到「發送到以下無效地址的錯誤:$ CHANGE_AUTHOR_EMAIL」 –

相關問題