无法访问Jenkins中的变量- groovy

bakd9h0s  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(206)

下面是我的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,代码可以工作,并且我还可以看到一个值已经被赋给了该变量。但是当我再次尝试访问该变量时,我得到了同样的错误。我尝试了访问该变量的所有其他方法,但都不起作用。我不知道我做错了什么!

rqenqsqc

rqenqsqc1#

在你的例子中,${CR_STATUS}被当作Jenkins变量,Jenkins试图对它进行插值。为了跳过这一步,你可以在$之前添加一个转义字符。如下所示。

if [[ "\${CR_STATUS}" == "Approved" ]]; then
     echo 'hi'
fi

相关问题