Jenkins Pipelines:为什么CPS全局库没有加载?

Jenkins Pipelines:为什么CPS全局库没有加载?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我正在按照教程上的。我创建了一个包含以下文件的存储库: D:. │ Test.groovy │ ├───src └───vars helloWorld.groovy helloWorld.groovy包含: def call(name){ echo "Hello world, ${name}" } helloWorld("Joe") Test.groovy包含: def call(name){ echo "Hello world, ${name}"

我正在按照教程上的。我创建了一个包含以下文件的存储库:

D:.
│   Test.groovy
│   
├───src
└───vars
        helloWorld.groovy
helloWorld.groovy包含:

def call(name){
    echo "Hello world, ${name}"
}
helloWorld("Joe")
Test.groovy包含:

def call(name){
    echo "Hello world, ${name}"
}
helloWorld("Joe")
我安装了所有的管道插件,特别是工作流cps全局库插件。然后,我创建了一个新的管道作业,在其中加载这个存储库并将脚本路径设置为Test.groovy。运行此作业时,出现以下错误:

java.lang.NoSuchMethodError: No such DSL method 'helloWorld' found among [archive, bat, build, catchError, checkout, deleteDir, dir, echo, emailext, error, fileExists, git, input, isUnix, jiraComment, jiraIssueSelector, jiraSearch, load, mail, node, parallel, properties, pwd, readFile, readTrusted, retry, sh, sleep, stage, stash, step, svn, timeout, tool, unarchive, unstash, waitUntil, withEnv, wrap, writeFile, ws]

为什么没有定义helloWorld步骤?下面是我的已安装插件列表:

使用2.8版本的Pipeline:Groovy插件,我发现如果我更新/vars/myscript.Groovy下的Groovy脚本,Groovy将无法工作,但是如果我重新启动jenkins,一切正常。 若我只是从文件中重新加载配置,那个么什么也不会发生


因此,我认为只有在jenkins启动时,脚本才会被实例化为全局函数。(但可能我错了:)

管道全局库期望一个Git推送事件来更新Jenkins嵌入式工作流libs Git repo

推送触发
UserDefinedGlobalVariableList.rebuild()
方法请参见:

下面是一个将GitHub repo拉入Jenkins
工作流libs
repo,然后通过以下方式重新加载它而无需重新启动:

//获取管道全局库Jenkins扩展,该扩展在Git Push上重建全局库
列表扩展=ExtensionList.lookup(UserDefinedGlobalVariableList.class);
extensions.get(0).rebuild()//可能需要在此处添加检查以确保扩展不为null

我更新到了2.8版,但不幸的是,这并没有解决我的问题。此外,每次推送管道脚本时重新启动Jenkins对我来说不是一个可行的解决方案,我怀疑这是否可行,因为如果您查看控制台输出,您可以看到在启动构建时签出分支。根据我过去几天的经验,如果我在工作流libs/vars/中添加了一个新的script.groovy,我需要重新启动Jenkins,使其通过管道可见(只是在web界面内手动创建的管道脚本中进行了尝试)。如果我更新了以前的脚本,那么修改将在不重新启动jenkins的情况下出现。不要问我为什么,因为我不知道。:)我必须完全限定UserDefinedGlobalVariableList,但它工作得很好<代码>列表扩展=ExtensionList.lookup(org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariableList.class);extensions.get(0.rebuild()