下面是我的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
,代码可以工作,并且我还可以看到一个值已经被赋给了该变量。但是当我再次尝试访问该变量时,我得到了同样的错误。我尝试了访问该变量的所有其他方法,但都不起作用。我不知道我做错了什么!
1条答案
按热度按时间rqenqsqc1#
在你的例子中,
${CR_STATUS}
被当作Jenkins变量,Jenkins试图对它进行插值。为了跳过这一步,你可以在$
之前添加一个转义字符。如下所示。