Ich verwende Jenkins, um ein Ansible-Playbook über den Befehl Publish Over SSH
fernzuspielen.Jenkins - Array/Liste an parametriertes Remote-Build übergeben
Dieser Befehl:
curl -k -v -X POST https://jenkins.myhost.com/job/Ansible_Deploy/build?token=<appToken> --user <myUser>:<userToken> --data-urlencode json='{"parameter":[{"name":"thisIsAList","value":["one","two","three"]}]}'
ein Postbuild Aktion auslösen sollten Sie den folgenden Befehl über SSH remote auszuführen:
ansible-playbook /home/<myUser>/test/practice.yml --extra-vars "thisIsAList=$thisIsAList"
thisIsAList
ist ein String-Parameter unter Job-Benachrichtigungen, und die Job ist parametrisiert. Ich habe ähnliche Befehle erfolgreich ausgeführt, aber dieser Befehl schlägt fehl, vermutlich weil der Wert eine Liste ist. Ich habe sowohl "String Parameter" als auch "Multi-line String Parameter" vergeblich versucht.
Hier ist der Stack-Trace:
org.kohsuke.stapler.WrongTypeException: Got type array but no lister class found for type class java.lang.String
at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:723)
at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:777)
Caused: java.lang.IllegalArgumentException: Failed to convert the value parameter of the constructor public hudson.model.StringParameterValue(java.lang.String,java.lang.String)
at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:779)
at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:678)
Caused: java.lang.IllegalArgumentException: Failed to instantiate class hudson.model.StringParameterValue from {"name":"thisIsAList","value":["one","two","three"]}
at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:680)
at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:474)
at hudson.model.StringParameterDefinition.createValue(StringParameterDefinition.java:88)
at hudson.model.ParametersDefinitionProperty._doBuild(ParametersDefinitionProperty.java:165)
Hinweis: Dies kann ein Duplikat How to pass an array to a jenkins parameterized job via remote access api? sein, aber es hat keine gültige Antwort bekommen.
ich Ihre Frage erneut zu lesen und ich denke, ich anfangs falsch verstanden. Ich sehe was du jetzt versuchst zu tun. Das Problem besteht nicht darin, dass die Daten in Jenkins übergeben werden (Sie können es als Zeichenfolge verwenden. Das Problem besteht darin, die Daten korrekt an Ansible zu senden. Es muss als JSON formatiert werden, um eine Liste zu übergeben. - -Extra-vars = '{ "test_list": [1,2,3]}' http://docs.ansible.com/ansible/latest/playbooks_variables.html#passing-variables-on-the-command- –
Linie Ja, weil POSTen Jenkins bewirkt, dass die Daten an ansible gesendet werden, ich glaube, es zweimal interpretiert wird einmal durch TCP/IP versucht, es zu serialisieren, und dann wieder durch die Art und Weise ansible die Daten strukturiert in der 'will. - Extra-vars' Option. So Dinge strukturiert werden müssen und entkam richtig. ich löste das Problem oben though. –
Ah. Ja, ich nicht feststellen, dass Ihre andere Antwort ist. das ist im Grunde tut der gleiche Sache. –