Как создать методы в декларативном конвейере Дженкинса?

В скриптовом конвейере Jenkins мы можем создавать методы и вызывать их.

Возможно ли это и в декларативном конвейере Дженкинса? И как?

Ответ 1

Более поздние версии декларативных конвейеров поддерживают это, в то время как это было невозможно раньше (~ середина 2017 года). Вы можете просто объявлять функции, как вы ожидали бы, от строчного скрипта:

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

void whateverFunction() {
    sh 'ls /'
}

Ответ 2

Вы можете создать функцию groovy, подобную этой, и сохранить ее в своем git, который должен быть настроен как управляемая библиотека (Configure it in 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.

Вы можете повторно использовать существующие функции, которые вы храните в своей библиотеке.

Ответ 3

У вас также могут быть отдельные файлы 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

Ответ 4

Это сработало для меня. Это можно просмотреть с помощью 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
}