Как создать методы в декларативном конвейере Дженкинса?
В скриптовом конвейере 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
}