заводной:: java.lang.Исключение IllegalArgumentException: Ожидаемые именованные аргументы, но получены

#jenkins #groovy

Вопрос:

У меня есть конвейер Дженкинса следующим образом, и этот трубопровод выходит из строя со следующей ошибкой, я подозреваю, что с хэш-картами Java происходит что-то странное, но я совсем не уверен, может ли кто-нибудь помочь мне с этим?

     pipeline {
        agent { label 'master' }
        parameters {
        string(defaultValue: '123456789.ngrok.io/app-name:v1', description: '', name: 'docker_image', trim: true)
        password(defaultValue: 'app_db_password', description: '', name: 'app_db_password')
        }
        environment {
            .....
        }
        stages {
        stage('DeployAWS') {
                steps {
                    script{
                        withEnv(["ENV_APP_DB_PASSWORD=${params.app_db_password}"]) {
                            env.artifacts = sh(
                                returnStdout: true, 
                                script: """
                                    set  x
                                    python3 some_script.py --app_db_password='${ENV_APP_DB_PASSWORD}'
                                    set -x
                                    """
                                )
                                def encrypted_key_value_map = readJSON text: env.artifacts
                                ansiblePlaybook credentialsId: 'dev-server', disableHostKeyChecking: true, "-e "docker_image=${env.docker_image} fernet_key=${encrypted_key_value_map["fernet_key"]} app_db_password=${encrypted_key_value_map["app_db_password"]}"", inventory: 'playbooks/dvmt30/dev.inv', playbook: "playbooks/dvmt30/deploy-docker.yml"
                    }
                }
            }
        }

        }
    }
 

ошибка

 java.lang.IllegalArgumentException: Expected named arguments but got [{credentialsId=dev-server, disableHostKeyChecking=true, inventory=playbooks/dvmt30/dev.inv, playbook=playbooks/dvmt30/deploy-docker.yml}, -e "docker_image=123456789.ngrok.io/app-name:v1 fernet_key=$$$$$ app_db_password=*********"]
 

Комментарии:

1. Я подозреваю, что вам нужно добавить имя к "-e "docker_image=${env.docker_image} fernet_key=${encrypted_key_value_map["fernet_key"]} app_db_password=${encrypted_key_value_map["app_db_password"]}""

2. можете ли вы показать мне, как это сделать ? Я относительно новичок в java

3. Вы просто добавляете имя параметра и : перед ним. Я не знаю, какой из них тебе нужен.

Ответ №1:

Смотрите Документацию плагина, ansiblePlaybook ключевое слово получает словарь в качестве входных данных, и ваш переданный в функцию словарь искажен, так как в среднем значении отсутствует его ключ.
Чтобы устранить проблему, вы должны добавить это значение с extras помощью ключа:

 ansiblePlaybook credentialsId: 'dev-server',
                disableHostKeyChecking: true, 
                extras: "-e "docker_image=${env.docker_image} fernet_key=${encrypted_key_value_map["fernet_key"]} app_db_password=${encrypted_key_value_map["app_db_password"]}"", 
                inventory: 'playbooks/dvmt30/dev.inv', 
                playbook: "playbooks/dvmt30/deploy-docker.yml"