隐式加载共享库

时间:2019-12-04 18:08:13

标签: jenkins-pipeline jenkins-shared-libraries

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

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中配置全局共享库设置时,我具有以下设置:

enter image description here

现在在我的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而不必总是添加上述两行?

1 个答案:

答案 0 :(得分:2)

只需替换:

checks.fileExists()

具有:

fileExists()

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