问题
In Jenkins scripted pipeline we are able to create methods and can call them.
Is it possible also in the Jenkins declarative pipeline? And how?
回答1:
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 /'
}
回答2:
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.
回答3:
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
回答4:
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
}
来源:https://stackoverflow.com/questions/47628248/how-to-create-methods-in-jenkins-declarative-pipeline