Shell 命令不符合预期

Shell command not as expected

我是 Jenkins 的新手 Pipelines/Groovy 并且正在努力解决以下问题:

stage('Gating') {
    def gatingBaseUrl = "https://www.gating.org/api"

    def gatingParams = [
        "fiability": "$MIN_FIABILITY", 
        "security": "$MIN_SECURITY", 
        "maintenability": "$MIN_MAINTENABILITY"
    ]
    
    gatingQueryParams = gatingParams.collect{ k,v -> "$k=$v" }.join('&')
    gatingUrl = gatingBaseUrl + '?' + gatingQueryParams
    
    println "gatingUrl: " + gatingUrl

    sh(script: "echo $gatingUrl", returnStdout: true)
 }

输出如下:

[Pipeline] echo
gatingUrl: https://www.gating.org/api?fiability=A&security=A&maintenability=A
[Pipeline] sh
+ maintenability=A
+ echo 'https://www.gating.org/api?fiability=A&security=A&maintenability=A'
+ security=A

我想弄清楚为什么我的 url 在 shell 中使用时会被拆分,我该如何修复它。 谢谢

因为bash或shell中的&有不同的含义。我为此找到了一个很好的 guide - 看一看。 要解决您的问题,只需将 & 替换为 \& 转义序列,它应该可以工作。如下所示。

 sh(script: "echo ${gatingUrl.replace('&','\&')}", returnStdout: true)

sh "echo ${gatingUrl.replace('&','\&')}"