隐式加载共享库

Loading a shared library implicitly

我想将一个全局库集成到我的构建流程中。我写了一个基本功能

srv/core/jenkins/Checks.groovy:

package core.jenkins

class Checks implements Serializable {
def script

Checks(script) {
    this.script = script
}

def fileExists(){
    script.echo "File exists in the repo."
    }
}

并且公开为全局变量

vars/fileExisits.groovy:

def call() {
    new core.jenkins.Checks(this).fileExists()
}

在 Jenkins 中配置全局共享库设置时,我有以下设置:

现在在我的 jenkinsfile 中,我正在做这样的事情:

pipeline {
    agent { label 'master' }
    stages {
        stage('Check for md files'){
            steps {
                sh 'echo hello'
                script {
                    checks.fileExists()
                }
            }
        }
    }
}

这总是报错

groovy.lang.MissingPropertyException: No such property: checks for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at 

为了让它工作,我必须将这些行添加到我的 Jenkinsfile 的顶部

import core.jenkins.Checks
def checks = new Checks(this)

有没有办法让我从库中调用函数 fileExists 而不必总是添加以上两行?

只需替换:

checks.fileExists()

与:

fileExists()

实现def call()方法并存储在vars/文件夹中的所有Groovy脚本都可以通过脚本文件名触发。或者,如果您想保留 checks.fileExists() 语法,则需要创建 vars/checks.groovy 脚本文件并在其中实现 def fileExists() 方法。