Jenkinsfile:变量未在 SSH 命令中“解析”

Posted

技术标签:

【中文标题】Jenkinsfile:变量未在 SSH 命令中“解析”【英文标题】:Jenkinsfile: varibale not "parsed" inside SSH command 【发布时间】:2021-09-29 12:37:33 【问题描述】:

我在 JenkinsfFile 中定义了我的工件的一个版本,它可以很好地解决。我用变量的输出对此进行了测试。但是,它不会在 SSH 命令期间被解析。什么是正确的语法?

        version = sh (
        script: './gradlew -q printVersion',
        returnStdout: true
    ).trim()

    echo "$version" 

    sshPut remote: remote, from: 'build/libs/core-\$version-all.jar', into: '/opt/microservices/core.jar'

输出:

1.0.6 java.lang.IllegalArgumentException: /jenkins/workspace/core/build/libs/core-$version-all.jar 不存在。

【问题讨论】:

【参考方案1】:

Groovy 中的字符串插值需要使用双引号:-

sshPut remote: remote, from: "build/libs/core-$version-all.jar", into: '/opt/microservices/core.jar'

这就是为什么您的 echo 语句工作正常,但您的 sshPut 却不行。

见:https://groovy-lang.org/syntax.html#_string_interpolation

【讨论】:

该解决方案不起作用。同样的问题 @Jacob 删除反斜杠,你无意中逃脱了 $。 知道了。谢谢

以上是关于Jenkinsfile:变量未在 SSH 命令中“解析”的主要内容,如果未能解决你的问题,请参考以下文章

Jenkinsfile:在 Jenkinsfile 中设置/更新一个全局变量并在构建中使用它

Jenkinsfile中字符串变量使用

Jenkinsfile的语法检查(lint)

Jenkinsfile/Groovy:为啥 curl 命令会导致“错误请求”

无法通过 Jenkinsfile 运行“fastlane”命令

在远程 ssh 命令中传递变量