将包含双引号的值作为Jenkins中的批处理文件参数传递

6yoyoihd  于 2022-11-02  发布在  Jenkins
关注(0)|答案(2)|浏览(166)

我正在使用一个简单的Jenkins脚本,该脚本从curl GET请求中获取结果,将其存储在变量中,然后将该值作为参数发送到批处理文件

stage('test-stage') {
        steps {
          script {
              final String response = bat(script:'curl -X "GET" "www.someworkingurl.com" -H "accept: application/json"', returnStdout: true).trim()
              echo response
              bat """ "C:\\somepathto\\mybatchfile.cmd" "${response}" """
          }
        }
    }

虽然回声显示了预期的React(body从服务器返回),在它未能正确传递到批处理文件后立即执行。如果我理解正确的话,因为response包含带双引号的文本以及(例如json文件)它可能会破坏该行正确传递值的能力,并且使其分开,就好像响应中引号之间的每个单词都被解释为命令一样。
我一直无法找到解决这个问题的方法,也无法在网上找到解决方案。搜索这样的通用术语(jenkins escape double quote in string)导致的结果显示了如何在jenkins管道中手动转义静态字符串中的双引号,这不是我试图实现的。
如何使其正常工作?

jogvjijk

jogvjijk1#

你有没有试过用ecaped报价:

bat """ \"C:\\somepathto\\mybatchfile.cmd\" \"${response}\" """

您还可以尝试以下操作:

env.response = response
bat ''' "C:\\somepathto\\mybatchfile.cmd" "${response}" '''

“env.”是一个环境变量,可以在批处理中访问。

wfveoks0

wfveoks02#

另一个可以尝试的选项,它将在您的响应中添加转义字符

def newRes = response.replaceAll('"', '\\\\"')
bat """ "C:\\somepathto\\mybatchfile.cmd" ${newRes} """

相关问题