从jenkinsfile加载的groovy脚本未找到

时间:2017-08-02 11:31:41

标签: jenkins groovy jenkins-pipeline

目前我有一个"全包" jenkinsfile包含各种功能。 为了在其他jenkins文件中重用这些函数,我想将它们放入单独的groovy脚本中并从jenkins文件中加载它们。

scmHandler.groovy:

 #!groovy
 def handleCheckout() {
    if (env.gitlabMergeRequestId) {
       echo 'Merge request detected. Merging...'
    }
    ...
 }
 return this;
我在jenkinsfile中的

... def scmHandler = load ("test/scmHandler.groovy") scmHandler.handleCheckout()

我尝试按照here的说明操作,但jenkins经常抱怨我没有这样的档案scmHandler.groovy

java.io.FileNotFoundException: d:\jenkins\workspace\myJenkinsJob\test\scmHandler.groovy

jenkinsfile和scmHandler.groovy都驻留在项目的git仓库中工作区的test/子目录中,并在master上正确检出:

    /var/lib/jenkins/jobs/myJenkinsJob/workspace@script/test/scmHandler.groovy

但是我无法在jenkinsfile执行node {}内的构建步骤的从节点上找到它们。在那里我只看到旧版本的jenkins文件,因为(分开的)结帐步骤尚未执行。

如何正确访问handleCheckout.groovy?我在这里想念什么?

实际上,我发现这是一个巧妙的方式来包括"包括"外部groovy文件,不使用单独的库。

1 个答案:

答案 0 :(得分:0)

在加载checkout scm

之前使用scmHandler.groovy
checkout scm
def scmHandler = load ("test/scmHandler.groovy")
scmHandler.handleCheckout()