78 votes

Comment créer des méthodes dans un pipeline déclaratif Jenkins?

Dans le pipeline scripté Jenkins, nous pouvons créer des méthodes et les appeler.

Est-ce possible aussi dans le pipeline déclaratif de Jenkins? Et comment?

92voto

StephenKing Points 4379

Les versions les plus récentes des pipelines déclaratifs le permettent, alors que cela 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 /'
}
 

27voto

lvthillo Points 8424

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.

19voto

awefsome Points 161

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()
                }
            }
        }
    }
}
 

premiere

 def test1(){
    //add code for this method
}
def test2(){
    //add code for this method
}
return this
 

19voto

Mukesh M Points 1242

Cela a fonctionné pour moi.Il peut être visualisé avec l'interface graphique Blue Ocean, mais lorsque je modifie à l'aide de l'interface graphique Blue Ocean, il supprime les méthodes "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
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X