#jenkins #jenkins-pipeline
#дженкинс #дженкинс-конвейер
Вопрос:
Я пишу сценарий 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 в org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:588) 00:59:22 в org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:521) 00:59:22 в org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:220) 00:59:22 в org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:179) 00:59:22 в org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
Ответ №1:
Попробуйте
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;
}
}
Комментарии:
1. Получение этого:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 00:49:09 WorkflowScript: 9: Not a valid section definition: "if ("QA" == params.ServerName){ 00:49:09 echo "Server is ${serverName}" 00:49:09 environment { 00:49:09 AWS_ACCESS_KEY_ID = credentials ('AWS_ACCESS_KEY_ID_QA') 00:49:09 AWS_SECRET_ACCESS_KEY = credentials('AWS_SECRET_ACCESS_KEY_QA') 00:49:09 } 00:49:09 }". Some extra configuration is required. @ line 9, column 9.
2. будет ли переменная ServerName иметь значение QA или PROD ? и задано ли имя_сервера как переменная env ?
3. Да, имя сервера будет иметь значение QA или PROD. Это параметризованное задание, и значение будет приходить динамически. Я также попробовал
params.ServerName
и повторил значение. Значение приходит нормально.4. Я также обновил сообщение с обновленным сценарием и ошибкой.
5. Обновлен ответ. Предполагая, что вы выполняете параметризованную сборку