#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"