jenkinsfile使用traits和其他groovy synax

我想通过jenkinsfiles使用稍微复杂的管道构建,有一些可重用的步骤,因为我有很多或类似的项目.我正在使用jenkins 2.0和管道插件.我知道你可以加载groovy脚本,其中包含一些通用的代码片段,但我想知道这些脚本是否可以使用一些像traits一样的面向对象的特性.比如说我有一个名为Step的特征:

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文件中加载和使用所有这些类,特别是因为我可能有多个类定义一个步骤?这甚至可能吗?

最佳答案 看一下
Shared Libaries.这些可以在Jenkins中使用原生的groovy代码.

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

Excerpt来自文件:
这是一个定义阶段的类

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'
}
点赞