76

在 Jenkins 脚本化管道中,我们能够创建方法并调用它们。

在 Jenkins 声明性管道中是否也有可能?如何?

4

4 回答 4

89

较新版本的声明式管道支持这一点,而这在之前(~2017 年中)是不可能的。您可以按照 groovy 脚本的期望声明函数:

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

void whateverFunction() {
    sh 'ls /'
}
于 2017-12-04T10:44:12.077 回答
27

您可以像这样创建一个 groovy 函数并将其保存在您的 git 中,该 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.

您可以重用您保存在库中的现有函数。

于 2017-12-04T10:37:51.277 回答
19

您还可以拥有包含所有功能的单独 groovy 文件(只是为了保持结构和整洁),您可以使用管道将其加载到文件中:

JenkinsFile.groovy

Map modules = [:]
pipeline {
    agent any
    stages {
        stage('test') {
            steps {
                script{
                    modules.first = load "first.groovy"
                    modules.first.test1()
                    modules.first.test2()
                }
            }
        }
    }
}

第一个.groovy

def test1(){
    //add code for this method
}
def test2(){
    //add code for this method
}
return this
于 2018-08-10T06:39:27.063 回答
19

这对我有用。它可以使用 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
}
于 2018-11-26T05:51:18.403 回答