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

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

有没有可能也在詹金斯的宣言中? 怎么可能?

108770 次浏览

You can create a groovy function like this and save it in your git which should be configured as managed library (Configure it in jenkins too):

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

Content:

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

You can just call this method in your pipeline using:

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

Output:

[Pipeline] echo
Hello, Joe.

You can reuse existing functions which you keep in your library.

Newer versions of the declarative pipelines support this, while this was not possible before (~mid 2017). You can just declare functions as you'd expect it from a groovy script:

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


void whateverFunction() {
sh 'ls /'
}

You can also have separate groovy files with all your functions (just to keep things structured and clean), which you can load to file with pipeline:

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

This worked for me.It can be view with Blue Ocean GUI but when I edit using Blue Ocean GUI it removes methods "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
}