2017-06-05 138 views
0

試圖讓這個管道工作.. 我需要在groovy中準備一些變量(列表或字符串),並在bash中迭代它。據我所知,groovy腳本運行在詹金斯大師,但我需要下載一些文件到生成工作區,這就是爲什麼我嘗試下載他們在SH步驟。Jenkins管道外殼步驟

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

運行,當我得到這個錯誤..

[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) 

看起來像我失去了一些東西明顯...

回答

0

的問題是出在這裏三行:

for dash in $dash_names_string; 
do 
    echo $dash 
done 

它試圖在groovy-land中找到$dash財產並且找不到。我實際上無法考慮如何使這項工作成爲內聯sh步驟(可能沒有足夠的睡眠),但是如果您將json響應的相關內容保存到文件中,然後將這四行替換爲讀取文件並從Jenkinsfile中調用它,如sh './hotScript.sh',它不會嘗試將該美元值評估爲groovy,並且應該至少以不同的方式失敗。 :)

2

逃命用反斜槓shell變量的$,應該幫助:

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

謝謝,它的工作原理! – fragpit