jenkinsfile使用traits和其他groovy synax

jenkinsfile使用traits和其他groovy synax,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我想通过Jenkins文件使用稍微复杂一点的管道构建,以及一些可重用的步骤,因为我有很多或类似的项目。我正在使用jenkins 2.0和管道插件。我知道您可以加载groovy脚本,其中包含一些通用的代码片段,但我想知道这些脚本是否可以使用groovy特性的一些面向对象特性。例如,假设我有一个叫做步骤的特征: package com.foo.something.ci trait Step { void ex

我想通过Jenkins文件使用稍微复杂一点的管道构建,以及一些可重用的步骤,因为我有很多或类似的项目。我正在使用jenkins 2.0和管道插件。我知道您可以加载groovy脚本,其中包含一些通用的代码片段,但我想知道这些脚本是否可以使用groovy特性的一些面向对象特性。例如,假设我有一个叫做步骤的特征:

package com.foo.something.ci 
trait Step {                                         
    void execute(){ echo 'Null execution'}                                 
}
然后在另一个文件中实现该特性的类:

class Lint implements Step {
    def execute() {
        stage('lint')
        node {
            echo 'Do Stuff'
        }
    }
}
然后是另一个包含“main”函数的类:

class foo {
   def f = new Lint()
   f.execute()
}
我如何在一个Jenkins文件中加载和使用所有这些类,尤其是因为我可能有多个类,每个类定义一个步骤?这可能吗?

看看。这些支持在Jenkins中使用本机groovy代码

您的Jenkins文件将包括您的共享库,并使用您定义的类。请注意,如果要使用
stage
或Jenkins管道插件中定义的其他变量,则必须传递Jenkins的steps变量

从文件中: 这是定义阶段的类

package org.foo
class Utilities implements Serializable {
  def steps
  Utilities(steps) {this.steps = steps}
  def mvn(args) {
    steps.sh "${steps.tool 'Maven'}/bin/mvn -o ${args}"
  }
}
您可以这样使用它:

@Library('utils') import org.foo.Utilities
def utils = new Utilities(steps)
node {
  utils.mvn 'clean package'
}