如何有条件地在环境指令中传递凭据绑定

How to pass credential binding in environment directive conditionally

这行不通:

environment {
    Pass = "${blah == 'yes' ? credentials('somecred') : credentials('otherCred')}"

我可以直接将 env var 设置为 credentials(),但是当尝试像上面那样在字符串插值器内部使用三元语句时,它不会传递实际的信用,它会传递一个字符串化的对象。

是否有在环境{}指令中执行此操作的一行代码?

Jenkins 允许您将字符串插值器潜入环境块中以评估代码,是否有另一个 Groovy 我可以在这里使用的构造会起作用?

jenkins 管道 dsl 让我哭泣

# Define outside of pipeline block
def MYENV_VAR = somevar == 'yes' ? 'cred-id-1' : 'cred-id-2'

pipeline {
    agent any

    environment {
            MYENV = credentials("${MYENV_VAR}")

如果您想根据条件使用不同的凭据,可以使用以下示例来完成:

stage ("Example") {
  steps {
    script {
      if ( params.TEST_PARAMETER == "test_value1" ) {
        withCredentials([string(credentialsId: env.CREDENTIALS_1, variable: 'SOME_VARIABLE')]) {
          yourFunction()
        }
      }
      else {
        withCredentials([string(credentialsId: env.CREDENTIALS_2, variable: 'SOME_VARIABLE')]) {
          yourFunction()
        }
      }
    }
  }
}

您需要在 jenkinsfile 的末尾定义 yourFunction。在这种情况下,当作业中的 TEST_PARAMETERtest_value1 时,将使用 Jenkins 凭据列表中的 CREDENTIALS_1。当 TEST_PARAMETER 不同时,将使用 CREDENTIALS_2 凭据。通过将其修改为 case 循环,您可以有更多选择。

虽然不是 one-liner。

希望这对您有所帮助。