2016-06-19 58 views
4

我想通過jenkinsfiles使用稍微更復雜的管道構建,有一些可重用的步驟,因爲我有很多或類似的項目。我使用jenkins 2.0和管道插件。我知道你可以加載包含一些通用代碼片段的groovy腳本,但我想知道這些腳本是否可以使用Groovy的一些面向對象特性,如特徵。例如說我有一個特點叫步:jenkinsfile使用特性和其他groovy synax

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() 
} 

我將如何加載和使用Jenkinsfile中的所有這些類,特別是因爲我可能有多個類,每個類都定義一個步驟?這甚至有可能嗎?

回答

1

看看Shared Libaries。這些可以在Jenkins中使用native groovy代碼。

您的Jenkinsfile將包含您的共享庫,並使用您定義的類。請注意,如果要使用Jenkins Pipeline插件中定義的stage或其他變量,則必須通過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' 
}