Jenkinsfile 插值语法问题

问题描述 投票:0回答:1

我的声明式 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} 包含在“”中可以解决该问题。有人能看到解决方案吗?非常感谢。

jenkins-pipeline jenkins-groovy
1个回答
0
投票

正如您似乎已经从问题中知道的那样,您需要将

lambdaName
作为字符串中的 Groovy 变量进行插值,并将凭证变量解析为 shell 解释器中的环境变量。您可以通过以下方式实现此目的:

sh "python get-artifact.py -u \${ARTIFACTORY_USERNAME} -p \${ARTIFACTORY_PASSWORD} -b ${lambdaName}.jar"

转义

$
字符可以防止 Groovy 将它们插入字符串中,而是导致它们被 shell 解释器解析。
"
语法按照您期望的方式插入
lambdaName

© www.soinside.com 2019 - 2024. All rights reserved.