在Jenkins管道中为变量分配步骤

时间:2017-08-18 08:42:08

标签: jenkins jenkins-pipeline

我有以下管道脚本:

node {
    def myStep = sh
    myStep "ls -la"
}

我认为步骤作为变量可见,可以分配给变量,以便以后可以使用(例如根据某些条件选择不同的步骤)。

然而,这失败了:

[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: myStep for class: groovy.lang.Binding
  at groovy.lang.Binding.getVariable(Binding.java:63)
  at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:232)
  at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:282)
  at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:286)
  at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:28)
  at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
  at WorkflowScript.run(WorkflowScript:3)
  at ___cps.transform___(Native Method)

如何在变量中添加一个步骤以便稍后使用它而不对其名称进行硬编码?

2 个答案:

答案 0 :(得分:1)

您可以在管道中编写一个包含所需行为的方法。它可以访问脚本变量。

node {
  myStep("ls -la")
}

def myStep(String script) {
  sh(script)
}

答案 1 :(得分:0)

我目前的解决方法:

node {
    def myStep = { script -> 
        sh script
    }
    myStep("ls -la")
}