Groovy jenkins 管道中的字符串插值 - 混合凭据和常量
Groovy string interpolation in jenkins pipeline - mixing credentials and constants
努力处理我的 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 级别上使用.
努力处理我的 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 级别上使用.