从jenkins slave

时间:2017-04-27 15:03:32

标签: jenkins groovy jenkins-pipeline jenkins-slave

我有一个jenkins管道,它加载一个像这样的groovy实用程序脚本:

Utils = load('/var/lib/jenkins/utils/Utils.groovy')

当我在节点上执行管道时,一切都很好。在这种情况下,我可以在管道中使用我的类Utils中的方法。

node('master'){
    stage('stage1'){
        def Utils = load('/var/lib/jenkins/utils/Utils.groovy')
        Utils.doSomething()
    }
}

当我尝试在奴隶中执行我的管道时出现了问题。在这种情况下,上面的负载会导致错误

java.io.IOException:java.io.FileNotFoundException:/var/lib/jenkins/utils/Utils.groovy(没有这样的文件或目录)

为避免此错误,在管道中,我将文件加载到主节点中,如下所示

node('master'){
    stage('stage1'){
        Utils = load('/var/lib/jenkins/utils/Utils.groovy')
    }
}
node(){
    stage('stage2'){
        Utils.doSomething()
    }
}

这不是很有效,我不想仅仅使用master来加载文件 您对如何在从属节点上加载Groovy scipt有任何建议吗?

谢谢

1 个答案:

答案 0 :(得分:-1)

首先,上面的错误 java.io.IOException:java.io.FileNotFoundException:/var/lib/jenkins/utils/Utils.groovy(没有这样的文件或目录)是你造成的尝试在从属节点上执行时加载文件。但是这个文件存储在主节点中的/var/lib/jenkins/utils/Utils.groovy中,我想这是另一台计算机和另一个文件系统。所以,这个错误是合乎逻辑的。

当您在另一个节点(计算机,服务器等)上执行某些管道操作,并且您想要加载该文件时,您需要将其存储在该计算机(从属)中并从那里加载它 - 所以路径有根据从属计算机中的文件位置。

所以,我建议:

  1. 只需在从机上存储Utils.groovy文件并从中加载 有
  2. 将其加载到master上的工作区(就像您已经这样)
  3. 此外,您可以在github中存储groovy文件代码并从中加载 不依赖于主/从文件系统(我会建议这个选项)