web-dev-qa-db-fra.com

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

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?

18
vinesh vini

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 /'
}
22
StephenKing

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.

7
lvthillo

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
3
awefsome

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
}
0
Mukesh M