我的 Jenkins 管道中有以下代碼:
stage('CR Check') {
steps{
script
{
sh """
echo "Tagert env is ${targetenv}"
if [[ "${targetenv}" == 'preprod' || "${targetenv}" == 'prod' ]]; then
if [[ -z "${CR_NUMBER}" ]]; then
echo "ERROR: CR- ${CR_NUMBER} is empty"
exit 1
fi
echo -n "curl -X GET 'https://xxxxxxx/api/v1/read?changeRequest=" > cr_validate.sh
echo -n "${CR_NUMBER}" >> cr_validate.sh
echo -n "&format=JSON' -H 'accept: application/html'" >> cr_validate.sh
cat cr_validate.sh
sh cr_validate.sh > cr_validate.json
CR_STATUS=`python -c "import json,sys; obj=json.loads(open('cr_validate.json','r').read());print (obj['Status'])"`
if [[ "${CR_STATUS}" == "Approved" ]]; then
echo 'hi'
fi
fi
"""
}
當我執行管道時,我收到以下錯誤:
hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No such property: CR_STATUS for class: WorkflowScript
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:66)
....
如果我洗掉了if else我使用變數的最后一個條件CR_STATUS,則代碼有效,我還可以看到已為該變數分配了一個值。但是當我再次嘗試訪問這個變數時,我得到了同樣的錯誤。我嘗試了所有其他訪問變數的方法,但它不起作用。我不知道我做錯了什么!
uj5u.com熱心網友回復:
在您的情況下${CR_STATUS},它被視為 Jenkins 變數,而 Jenkins 正試圖對其進行插值。為了跳過這個,您可以在$. 像下面的東西。
if [[ "\${CR_STATUS}" == "Approved" ]]; then
echo 'hi'
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516124.html
上一篇:npm:在jenkins中找不到用于MACOS的命令
下一篇:為什么還要阻止不執行腳本化管道?
