如何避免在 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}"
        }
    }