2017-11-10 12 views
0

In meinem Jenkins-Pipeline-Skript habe ich eine Karte namens ordinaryScripts, die Integer-Schlüssel (1-11) enthält und die Werte für jeden Schlüssel sind Listen. Die Elemente in den Listen sind absolute Pfade zu SQL-Skripten.Führen Sie SQL * Plus-Skript über Jenkins und Bat-Befehl

Ich Schleife durch die Karte und dann durch die Liste jedes Schlüssels durchlaufen, Ausführen der Elemente in der Liste über sqlplus. Code-Snippet unten, wobei <credentials> die verwendeten DB-Anmeldedaten sind.

orderedScripts.each { 
     key, value -> for(item in value){ 
      bat "sqlplus <credentials> @'${item}'" 
     } 
    } 

Wenn jedoch Jenkins den Job läuft ich folgende Serilizable Fehler:

Caused: java.io.NotSerializableException: hudson.scm.SubversionChangeLogSet 
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860) 
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:569) 
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65) 
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56) 
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50) 
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 
at java.util.HashMap.internalWriteEntries(Unknown Source) 
at java.util.HashMap.writeObject(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 

Wenn ich die $ auszudrucken {Element} Variable mit einem normalen println(), dann zeigt es die richtige Skript Pfad. Damit die Schleife funktioniert und die richtigen Skripte identifiziert werden, wird Jenkins sie nicht einfach mit dem Befehl bat ausführen. Wenn ich den Pfad im Skript ausdrucke und ihn dann manuell in eine sqlplus-Sitzung kopiere und einfüge, wird er wie erwartet ausgeführt.

Von was ich finden kann, scheint es zu sein, wie ich die $ {item} Variable innerhalb des Bat-Befehls referenziere. Aber ich kann es nicht ausführen, mit verschiedenen Variationen von Zitaten. Wer erlebt das schon mal oder weiß was ich falsch mache?

Antwort

Verwandte Themen