web-dev-qa-db-ja.com

Jenkins Declarative Pipelineでメソッドを作成する方法は?

Jenkinsスクリプトパイプラインでは、メソッドを作成して呼び出すことができます。

Jenkinsの宣言パイプラインでも可能ですか?そしてどうやって?

30
vinesh vini

宣言型パイプラインの新しいバージョンはこれをサポートしていますが、これは以前は不可能でした(2017年中頃)。 groovyスクリプトから期待どおりに関数を宣言できます。

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

void whateverFunction() {
    sh 'ls /'
}
35
StephenKing

このようなgroovy関数を作成し、gitに保存して、マネージライブラリとして構成する必要があります(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.

ライブラリに保持している既存の関数を再利用できます。

11
lvthillo

また、パイプラインでファイルにロードできるように、すべての機能を備えた個別の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
6
awefsome

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