Dans jenkins scripted pipeline, nous pouvons créer des méthodes et les appeler.
Est-ce possible dans le pipeline déclaratif de Jenkins? Et comment?
Les versions les plus récentes des pipelines déclaratifs le prennent en charge, ce qui n’était pas possible auparavant (mi-2017). Vous pouvez simplement déclarer des fonctions comme vous le souhaiteriez d'un script groovy:
pipeline {
agent any
stages {
stage('Test') {
steps {
whateverFunction()
}
}
}
}
void whateverFunction() {
sh 'ls /'
}
Vous pouvez créer une fonction groovy comme celle-ci et l'enregistrer dans votre git qui devrait être configuré en tant que bibliothèque gérée (configurez-le également dans jenkins):
/path/to/repo-shared-library/vars/sayHello.groovy:
Contenu:
def call(String name = 'human') {
echo "Hello, ${name}."
}
Vous pouvez simplement appeler cette méthode dans votre pipeline en utilisant:
@Library('name-of-shared-library')_
pipeline {
agent any
stages {
stage('test') {
steps {
sayHello 'Joe'
}
}
}
}
Sortie:
[Pipeline] echo
Hello, Joe.
Vous pouvez réutiliser des fonctions existantes que vous gardez dans votre bibliothèque.
Vous pouvez également avoir des fichiers groovy séparés avec toutes vos fonctions (juste pour garder les choses structurées et propres), que vous pouvez charger dans un fichier avec 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
Cela a fonctionné pour moi. Cela peut être vu avec l'interface graphique Blue Ocean, mais lorsque j'édite à l'aide de l'interface graphique Blue Ocean, les méthodes "def showMavenVersion (String a)" sont supprimées.
pipeline {
agent any
stages {
stage('build') {
agent any
steps {
script {
showMavenVersion('mvn version')
}
}
}
}
}
def showMavenVersion(String a) {
bat 'mvn -v'
echo a
}