【问题标题】:How to avoid interpolation of sensitive variables in Jenkins如何避免在 Jenkins 中插值敏感变量
【发布时间】: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


【解决方案1】:

正如@daggett 建议的here

我将双引号替换为单引号,以像这样的 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}"
        }
    }

【讨论】:

    【解决方案2】:

    这很简单,你需要将它们用作环境变量。

    我已将下面的用户名和密码更改为环境变量,如果需要,您可以为其他人做同样的事情。

    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}'
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2018-06-26
      • 2019-12-05
      • 2018-09-01
      • 1970-01-01
      • 2020-06-28
      • 2022-01-02
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多