我想通过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'
}
}
}
然后是另一个包含'主要'功能:
class foo {
def f = new Lint()
f.execute()
}
我如何在Jenkins文件中加载和使用所有这些类,特别是因为我可能有多个类定义一个步骤?这甚至可能吗?
答案 0 :(得分:1)
看看Shared Libaries。这些允许在Jenkins中使用原生groovy代码。
您的Jenkinsfile将包含您的共享库,并使用您定义的类。请注意,如果要使用stage
或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'
}