【发布时间】:2021-04-28 22:16:55
【问题描述】:
我在这样的环境中有一个变量
PACT_ARGUMENTS = "--pacticipant ${APP_NAME} \
--broker-base-url ${PACT_BROKER_URL} \
--broker-username ${PACT_BROKER_BASIC_CREDENTIALS_USR} \
--broker-password ${PACT_BROKER_BASIC_CREDENTIALS_PSW} \
--version ${GIT_COMMIT}"
我有两个阶段像这样使用它们
stage('Can I Deploy to Dev') {
agent none
steps {
sh 'docker run --rm ${PACT_CLI_IMAGE} broker can-i-deploy ${PACT_ARGUMENTS} --to ${PACT_DEFAULT_ENV}'
}
}
stage('Create Dev Version Tag') {
agent none
steps {
sh 'docker run --rm ${PACT_CLI_IMAGE} broker create-version-tag ${PACT_ARGUMENTS} --tag ${PACT_DEFAULT_ENV}'
}
}
它工作正常,但我在 Jenkins 中收到通知说 已检测到的以下步骤可能对敏感变量进行了不安全的插值
我以前的解决方案是
stage('Can I Deploy to Dev') {
agent none
steps {
sh 'docker run --rm ${PACT_CLI_IMAGE} broker can-i-deploy \
--pacticipant ${APP_NAME} \
--broker-base-url ${PACT_BROKER_URL} \
--broker-username ${PACT_BROKER_BASIC_CREDENTIALS_USR} \
--broker-password ${PACT_BROKER_BASIC_CREDENTIALS_PSW} \
--version ${GIT_COMMIT}\
--to ${PACT_DEFAULT_ENV}'
}
}
但我选择提取其中的几个参数,因为它看起来会更干净一些。我试图用单引号替换 PACT_ARGUMENTS 但它只是将整个内容作为一个字符串。有什么建议如何处理这种情况?
【问题讨论】:
-
如果我没记错的话,为了能够使用像 ${variable} 这样的表达式作为字符串的一部分,在声明该字符串时使用双引号。如果您使用单引号,它们将不会被替换。
-
对 PACT_ARGUMENTS 使用单引号,对
sh使用双引号。通过环境变量(如在您的解决方案中)而不是通过插值传递密码变量的想法。 -
@daggett 谢谢你
标签: jenkins groovy jenkins-pipeline jenkins-groovy