2017-06-05 140 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