0

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

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."
    }
}

它被暴露为一个全局变量

变量/文件Exisits.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从库中调用函数而不必总是添加上述两行?

4

1 回答 1

2

只需更换:

checks.fileExists()

和:

fileExists()

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

于 2019-12-04T21:51:58.223 回答