首页 > 解决方案 > 詹金斯管道中的 Groovy 字符串插值 - 混合凭证和常量

问题描述

我的 jenkinsfile 的一部分需要混合凭据和定义的变量传递给函数。

函数如下所示:

platformList.each { platform -> 
    stage("Build ${platform}") {
        withCredentials([usernamePassword(credentialsId: 'XXX-XXX-XX', passwordVariable: 'unity_password', usernameVariable: 'unity_username')]) {
            sh label: "Build App", script: '${WORKSPACE}/ci/build_app.sh build_app ${platform} ${deployment} $unity_username $unity_password'
        }
    }
}

我正在尝试遵循此处讨论的有关字符串插值的建议:https ://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation

但是,我似乎无法将插值凭证与单引号以及${platform}每个循环中定义的派生变量混合使用。

platformList是一个包含 1+ 个字符串的数组。它是这样生成的:

script {
    if (params['windows'] == true) {
        platformList.add("windows")
    }
    if (params['osx'] == true) {
        platformList.add("osx")
    }
    ...
}

如果我按原样运行此脚本,则该${platform}变量将作为空白字符串传递给sh调用。

如果我双引号sh调用它可以正常工作,但是我会收到有关通过插值传递的不安全凭据的警告。

${deployment}变量是定义为作业执行的一部分的字符串参数,解析没有问题,所以我认为这是一个与each循环相关的问题。

标签: groovyjenkins-pipelinejenkins-groovy

解决方案


使用双引号但转义$密码符号".... \$unity_password"

在这种情况下,它不会在 groovy 级别上进行插值,而是按原样传递给 shell,环境变量将在 shell 级别上使用。


推荐阅读