2017-06-05 13 views
0

Der Versuch, diese Pipeline arbeiten .. Ich muss einige Variablen (Liste oder Zeichenfolge) in groovy vorzubereiten, und iterieren Sie es in bash. Wie ich weiß, laufen groovige Skripte auf jenkins master, aber ich muss einige Dateien in den build workspace laden, deshalb versuche ich sie in SH step herunterzuladen.Jenkins Pipeline Shell Schritt

import groovy.json.JsonSlurper 
import hudson.FilePath 
pipeline { 
    agent { label 'xxx' } 
    parameters { 
... 
    } 
    stages { 
     stage ('Get rendered images') { 
      steps { 
       script { 
        //select grafana API url based on environment 
        if (params.grafana_env == "111") { 
         grafana_url = "http://xxx:3001" 
        } else if (params.grafana_env == "222") { 
         grafana_url = "http://yyy:3001" 
        } 

        //get available grafana dashboards 
        def grafana_url = "${grafana_url}/api/search" 
        URL apiUrl = grafana_url.toURL() 
        List json = new JsonSlurper().parse(apiUrl.newReader()) 
        def workspace = pwd() 
        List dash_names = [] 
        // save png for each available dashboard 
        for (dash in json) { 
         def dash_name = dash['uri'].split('/') 
         dash_names.add(dash_name[1]) 
        } 
        dash_names_string = dash_names.join(" ") 
       } 
       sh "echo $dash_names_string" 
       sh """ 
        for dash in $dash_names_string; 
        do 
         echo $dash 
        done 
        """ 
      } 
     } 
    } 
} 

ich diese Fehlermeldung erhalten, wenn laufen ..

[Pipeline] End of Pipeline 
groovy.lang.MissingPropertyException: No such property: dash for class: WorkflowScript 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458) 
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:33) 
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20) 
    at WorkflowScript.run(WorkflowScript:42) 

Sieht aus wie ich offensichtlich etwas fehlt bin ...

Antwort

0

das Problem ist auf Linie drei hier:

for dash in $dash_names_string; 
do 
    echo $dash 
done 

es wird versucht, eine $dash Eigenschaft in groovy-Land zu finden und keine zu finden. Ich kann nicht wirklich denken, wie man diese Arbeit vi ein Inline-Schritt sh macht (möglicherweise nicht genug Schlaf), aber wenn Sie den relevanten Inhalt Ihrer JSON-Antwort auf eine Datei speichern und dann ersetzen diese vier Zeilen mit einem Shell-Skript, das liest Datei und rufen Sie es aus der Jenkinsfile wie sh './hotScript.sh', es wird nicht versuchen, diesen Dollarwert als groovy zu bewerten, und sollte auf eine andere Weise zumindest scheitern. :)

2

Escape the $ für das Shell-Variable mit einem Backslash soll, dass helfen:

for dash in $dash_names_string; 
    do 
     echo \$dash 
    done 
+0

Dank, es funktioniert! – fragpit

Verwandte Themen