jenkins 管道中的 Groovy 字符串插值 - 混合凭据和常量

标签 groovy jenkins-pipeline jenkins-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 循环相关的问题。

最佳答案

使用双引号但转义密码 $".... \$unity_password" 符号
在这种情况下,它不会在 groovy 级别上进行插值,而是按原样传递给 shell,而环境变量将在 shell 级别上使用。

关于jenkins 管道中的 Groovy 字符串插值 - 混合凭据和常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64834714/

相关文章:

groovy - 如何将 groovy 映射转换为 json

unit-testing - Grails-表ID默认为不能为null还是可以?

jenkins - 如何检查 Jenkinsfile 中的构建参数是否可用

jenkins - 如何在 Jenkins 文件中声明多个代理,然后在后续阶段引用它们?

docker - jenkinsfile docker.withRegistry 使用子域方法推送到artifactory

java - 如何修复 java.lang.RuntimeException : Error creating extended parser class: null error in Jenkins?

groovy - 如何将节点添加到 groovy MarkupBuilder?

java - 如何在不丢失消息负载的情况下将 sleep 设置为 Mulesoft 中的流

groovy - 为什么我的常规枚举无法工作,甚至无法编译?

jenkins - 将 Jenkins 输入步骤中的文件上传到工作区