如何避免在 Jenkins 中对敏感变量进行插值
How to avoid interpolation of sensitive variables in Jenkins
我在环境中有一个类似这样的变量
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 但它只是把整个东西当作一个字符串。对如何处理这种情况有什么建议吗?
很简单,你需要将它们用作环境变量。
我已将下面的用户名和密码更改为用作环境变量,如果需要,您可以为其他人做同样的事情。
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}'
}
}
正如@daggett 所建议的那样
我将双引号替换为单引号 PACT_ARGUMENTS 像这样的变量
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'
然后我用双引号 sh
像这样
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}"
}
}
我在环境中有一个类似这样的变量
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 但它只是把整个东西当作一个字符串。对如何处理这种情况有什么建议吗?
很简单,你需要将它们用作环境变量。
我已将下面的用户名和密码更改为用作环境变量,如果需要,您可以为其他人做同样的事情。
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}'
}
}
正如@daggett 所建议的那样
我将双引号替换为单引号 PACT_ARGUMENTS 像这样的变量
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'
然后我用双引号 sh
像这样
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}"
}
}