如何在Jenkins Declarative管道中创建方法?

时间:2017-12-04 07:15:15

标签: groovy jenkins-pipeline

在jenkins脚本管道中,我们可以创建方法并可以调用它们。

是否可以在Jenkins声明性管道中使用?怎么样?

4 个答案:

答案 0 :(得分:27)

声明性管道的较新版本支持这一点,而在此之前(2017年中期)这是不可能的。你可以像一个groovy脚本那样声明函数:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                whateverFunction()
            }
        }
    }
}

void whateverFunction() {
    sh 'ls /'
}

答案 1 :(得分:8)

你可以像这样创建一个groovy函数并将它保存在你应该配置为托管库的git中(也可以在jenkins中配置它):

/path/to/repo-shared-library/vars/sayHello.groovy:

内容:

def call(String name = 'human') {
    echo "Hello, ${name}."
}

您可以使用以下方法在管道中调用此方法:

@Library('name-of-shared-library')_
pipeline {
    agent any
    stages {
        stage('test') {
            steps {
                sayHello 'Joe'
            }
        }
    }
}

输出:

[Pipeline] echo
Hello, Joe.

您可以重复使用保存在库中的现有功能。

答案 2 :(得分:6)

您还可以使用具有所有功能的单独groovy文件(只是为了保持结构的整洁),可以使用管道将其加载到文件中。

JenkinsFile.groovy

Map modules = [:]
pipeline {
    agent any
    stages {
        stage('test') {
            steps {
                script{
                    modules.first = load "first.groovy"
                    modules.first.test1()
                    modules.first.test2()
                }
            }
        }
    }
}

first.groovy

def test1(){
    //add code for this method
}
def test2(){
    //add code for this method
}
return this

答案 3 :(得分:2)

这对我有用。它可以在Blue Ocean GUI中查看,但是当我使用Blue Ocean GUI编辑时,它会删除方法“ def showMavenVersion(String a)”。

pipeline {
agent any
stages {
    stage('build') {
        agent any
        steps {
            script {
                showMavenVersion('mvn version')
            }
        }
    }
}

}

def showMavenVersion(String a) {
        bat 'mvn -v'
        echo a
}