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

时间:2018-06-19 01:16:52

标签: jenkins jenkins-plugins jenkins-pipeline

这不起作用:

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

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

在environement {}指令中是否有单行代码?

Jenkins允许你将字符串插值器隐藏到环境块中以评估代码,我可以在这里使用另一种groovy构造吗?

2 个答案:

答案 0 :(得分:2)

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}")

答案 1 :(得分:-1)

如果您要根据条件使用其他凭据,可以使用以下示例进行操作:

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循环,您可以有更多选择。

虽然不是单线的。

希望这会有所帮助。