首页 > 解决方案 > 如何在 jenkinsFile 的环境部分添加 if 条件

问题描述

我正在编写一个 jenkins 脚本,我需要根据参数(QA/Prod)初始化环境。以下是我写的脚本:

def serverName = ${ServerName} // I get this value from the parametrized job value.
pipeline {
    agent any

    agent any
    tools {
        terraform 'Terraform'
    }
    environment {
        AWS_ACCESS_KEY_ID = ""
        AWS_SECRET_ACCESS_KEY = ""
    }
    stages {
        stage('Set Environment') {
            steps {
                echo "Region is ${AWS_DEFAULT_REGION}"
                echo "Server Name is: "+params.ServerName
                script{
                    if ("QA" == params.ServerName){
                        withEnv(['AWS_ACCESS_KEY_ID='+credentials ('AWS_ACCESS_KEY_ID_QA')], ['AWS_SECRET_ACCESS_KEY='+credentials ('AWS_SECRET_ACCESS_KEY_QA')]){
                            echo "Key is ${AWS_SECRET_ACCESS_KEY}"
                            echo "Key is ${AWS_SECRET_ACCESS_KEY}"
                        }
                    }
                    if ("PROD" == params.ServerName){
                        withEnv(["AWS_ACCESS_KEY_ID=credentials('AWS_ACCESS_KEY_ID_PROD')"], ["AWS_SECRET_ACCESS_KEY=credentials('AWS_SECRET_ACCESS_KEY_PROD')"]){
                            echo "Key is ${AWS_SECRET_ACCESS_KEY}"
                            echo "Key is ${AWS_SECRET_ACCESS_KEY}"
                        }
                    }
                }
            }
        }

我收到以下错误:

00:59:22 java.lang.IllegalArgumentException:预期命名参数,但得到 [[AWS_ACCESS_KEY_ID=@credentials(=AWS_ACCESS_KEY_ID_QA)],[AWS_SECRET_ACCESS_KEY=@credentials(=AWS_SECRET_ACCESS_KEY_QA)]] 00:59:22 at org.jenkinsci.plugins .workflow.cps.DSL.parseArgs(DSL.java:588) 00:59:22 at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:521) 00:59:22 at org.jenkinsci .plugins.workflow.cps.DSL.invokeStep(DSL.java:220) 00:59:22 at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:179) 00:59:22 at org .jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)

标签: jenkinsjenkins-pipeline

解决方案


尝试

pipeline {
    environment {
            AWS_ACCESS_KEY_ID = GET_AWS_ACCESS_KEY_ID(env.serverName)
            AWS_SECRET_ACCESS_KEY = GET_AWS_SECRET_ACCESS_KEY(env.serverName)
    }
    
    //your rest of the pipeline code
}
def GET_AWS_ACCESS_KEY_ID(Server_Name) {
    if("QA".equals(Server_Name)) {
        return credentials ('AWS_ACCESS_KEY_ID_QA');
    } else if ("PROD".equals(Server_Name)) {
        return credentials ('AWS_ACCESS_KEY_ID_PROD');
    } else {
        return 0;
    }
}
def GET_AWS_SECRET_ACCESS_KEY(Server_Name) {
    if("QA".equals(Server_Name)) {
        return credentials ('AWS_SECRET_ACCESS_KEY_QA');
    } else if ("PROD".equals(Server_Name)) {
        return credentials ('AWS_SECRET_ACCESS_KEY_PROD');
    } else {
        return 0;
    }
}

推荐阅读