根据环境获取凭证

时间:2018-07-20 11:17:40

标签: jenkins-pipeline

我可以像从此处获取的示例中所解释的那样获取凭据-https://jenkins.io/doc/book/pipeline/syntax/#environment

stage('Example') {
        environment { 
            CREDS = credentials('MY_CREDS_DEV') 
        }
        steps {
            sh 'echo hello'
        }
}

但是我要做的是根据某些条件获取凭据。

例如,我在Jenkins凭证中定义了MY_CREDS_DEVMY_CREDS_QA。而且我在Jenkins的“准备运行环境”一节中定义了一个属性ENV=dev

我想根据自己的环境访问凭据,即 ENV 属性。

我尝试使用CREDS = credentials('MY_CREDS_' + ${ENV})并尝试将字符串串联提取到一个单独的函数中,并像CREDS = credentials(concatenate(${ENV}))那样调用它,但是我得到了Internal function call parameters must be strings.

所以看来我只能在credentials()函数中放入一个字符串,这基本上意味着要对其进行硬编码。但是我该如何选择要使用的凭据-dev或qa?

3 个答案:

答案 0 :(得分:1)

使用CREDS = credentials('MY_CREDS_' + ENV)CREDS = credentials("MY_CREDS_${ENV}")${ENV}不会变成'dev',而是${'dev'},因此它不是字符串。

出于完整性考虑:

实际上-在使用groovy控制台播放后-似乎${ENV}会尝试使用闭包参数$调用名为{ENV}的函数,该函数反过来会返回{{ 1}}。如果您定义了类似以下的函数,它将得到与'dev'相同的结果:

ENV

但是很可能那不是您想要的。

答案 1 :(得分:0)

在詹金斯(Jenkins)中为我工作:2.190.2。尚未在较早版本上进行测试。碰巧是我现在正在使用的那个。

在Jenkins:2.190.2中使用一些常规方法进行了这项工作。尚未在较早版本上进行测试。碰巧是我现在的那个。在多个阶段都能正常工作。

pipeline {
  agent {
    label "xxxxx"
  }
  environment {
    ROLE = getRole()
  }
  stages{
    stage("write to s3 etc") {
        environment {
            AWS = credentials("${ROLE}")
        }
        steps {
            script {
                sh"""
                    aws s3 sync build/ "s3://xxxxxxxxxxxx"
                """
            }
        }
      }
   }
}

def getRole() {
   def branchName = "${env.BRANCH_NAME}"
   if (branchName == "xxxxxx") {
      return 'some_credential_string'
   }
   else {
      return 'some_other_credential_string'
   }
}

答案 2 :(得分:-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循环,您可以有更多选择。

希望这会有所帮助。

相关问题