代码之家  ›  专栏  ›  技术社区  ›  VaTo

詹金斯在抱怨我没改的一行的语法

  •  1
  • VaTo  · 技术社区  · 7 年前

    我在其中一个管道台阶上打了一个curl call,效果很好:

    stage("deploy") {
            when {
                            environment ignoreCase: true, name: "DEPLOY_TO", value: "staging"
                    }
                steps {
                    // copy files from dev to  server
                    sh """rsync...
    
                    #....
                        /bin/cp .....
    
    
                    rm -Rf /tmp/${env.SITEID}docs/
                    # clear the  caches
                   curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\""""
    

    当我在curl调用中添加if条件以防curl调用失败时,问题就开始了:

    stage("deploy") {
            when {
                            environment ignoreCase: true, name: "DEPLOY_TO", value: "staging"
                    }
                steps {
                    // copy files from dev to  server
                    sh """rsync...
    
                    #....
                        /bin/cp .....
    
    
                    rm -Rf /tmp/${env.SITEID}docs/
                    # clear the  caches
                    if [[ $( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi"""
    

    错误现在指向代码行 rm -Rf /tmp/${env.SITEID}docs/ 但令人困惑的是,我甚至没有更改那行代码!

    我收到的错误消息如下:

    ERROR: WorkflowScript: 119: illegal string body character after dollar sign;
       solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 119, column 41.
             rm -Rf /tmp/${env.SITEID}docs/
    

    感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Matthew Schuchard    7 年前

    问题仍然在您修改的行中:

    if [[ $( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi
    

    虽然输出行和输出列不正确,但消息正文是准确的。注意信息:

    美元符号后的非法字符串体字符;
    解决方案:要么转义文字美元符号“\$5”,要么用括号括起值表达式“$5”

    这是因为 $( curl 其中,美元符号被解释为表示插入字符串中的groovy和/或jenkins变量。错误中给出的两个建议是基于您是否有意。如果你的意思是这样的话,那么你需要像这样把它括起来:

    ${( curl...}
    

    但是,由于您不是有意这样做的,而是希望在字符串中插入一个shell变量,因此需要前面的建议,并避开 $ .

    结果行显示如下:

    if [[ \$( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi