groovy 如何在curl命令中传递变量

iezvtpos  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

下面是一个变量:

echo "${payload}"

字符串
Veriable的输出是:

\"G1/H77/J1\",\"G1/H77/J2\",\"G1/H77/J3\",\"G10/H77/J1\",\"G10/H77/J2\"


现在,我必须将这些值传递给curl POST请求:

def VALUES_BEFORE = sh(script: 'curl -X POST "http://kub01.abc.com:345678/abc/def" -H "accept: application/json" -H "Content-Type: application/json" -d \'{\"cell_ids\": ["${payload}"]}\' | json_pp',returnStdout: true).trim()


但是,Curl命令没有接受这个变量,我无法得到正确的输出。

将变量作为数据传递给curl命令的方法是否正确?

你的帮助会很有帮助的。谢谢

z3yyvxxp

z3yyvxxp1#

摘要

如果你想在字符串中使用groovy变量,你需要使用双引号。如果你需要在字符串中使用双引号,请对它们进行转义。

def foo = "im a double quote \" inside of double quoted string"

字符串
如果你需要使用$

echo("This is a literal dollar sign: \$")


如果使用单引号,则不计算变量。
我尝试了你的代码和webhooks测试器。正如预期的那样,发送的json是:
x1c 0d1x的数据

修复#1

Escape $有时候很痛苦,所以它不是最佳的,但它只是连接值,如
第一个月
就您而言

script: "curl .. -d '{\"cell_ids\": ["+payload+"]}'"

此处为完整管道

pipeline{
    
    agent any

    stages {
        stage ('Stage 1') {
            steps {
                script {
                    
                    def payload = "\"G1/H77/J1\",\"G1/H77/J2\",\"G1/H77/J3\",\"G10/H77/J1\",\"G10/H77/J2\""
                    def output = sh(script: "curl -X POST 'https://webhook.site/dac07d08-3d99-4a71-8170-f1529c7ff550' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{\"cell_ids\": ["+payload+"]}'" ,  returnStdout: true).trim()
                    println output
                }
            }
        }   
    }
}


因此发送到http端点的主体是预期的


参考资料

相关问题