我的声明式 Jenkins 文件中有以下步骤:
stage('Download Lambda Artifacts') {
steps {
script {
withCredentials([usernamePassword(credentialsId: ARTIFACTORY_CREDENTIALS_ID, usernameVariable: 'ARTIFACTORY_USERNAME', passwordVariable: 'ARTIFACTORY_PASSWORD')]) {
def lambdaNames = env.LAMBDA_NAME.tokenize(',')
for (lambdaName in lambdaNames) {
sh '''
python get-artifact.py -u ${ARTIFACTORY_USERNAME} -p ${ARTIFACTORY_PASSWORD} -b "${lambdaName}.jar"
'''
}
}
}
}
}
Python 脚本本质上只是从我的 Artifactory 下载 ${lambdaName}.jar,而 LAMBDA_NAME 只是一堆用逗号分隔的字符串。
这是我的问题:“${lambdaName}.jar”没有被插值,并且是一个空值。
如果我在 sh 中使用“””而不是“”,它可以工作,但随后我会收到有关我的 ARTIFACTORY_USERNAME/PASSWORD 对敏感变量进行不安全插值的警告。
我确信这是一个简单的语法问题,尽管将 ${lambdaName} 包含在“”中可以解决该问题。有人能看到解决方案吗?非常感谢。
正如您似乎已经从问题中知道的那样,您需要将
lambdaName
作为字符串中的 Groovy 变量进行插值,并将凭证变量解析为 shell 解释器中的环境变量。您可以通过以下方式实现此目的:
sh "python get-artifact.py -u \${ARTIFACTORY_USERNAME} -p \${ARTIFACTORY_PASSWORD} -b ${lambdaName}.jar"
转义
$
字符可以防止 Groovy 将它们插入字符串中,而是导致它们被 shell 解释器解析。 "
语法按照您期望的方式插入 lambdaName
。