找不到Jenkins共享库资源

时间:2018-08-23 09:55:40

标签: jenkins jenkins-pipeline jenkins-shared-libraries

我刚刚开始研究与jenkins的共享库,以便将跨几乎相同的多个存储库的脚本和管道负载组合在一起。

我已经加载并运行了共享库,但是在尝试执行脚本时,资源文件夹中我却一直找不到错误:

../releaseTagging-EO2DMYOPJ6JGB6JT5Q2RSFJWJWWPALA7F25H7CQNYBEV4ITTEB6Q@tmp/build.sh: not found

我正在使用以下方法创建文件的副本:

createTempLocation(String path) {
  String tmpDir = pwd tmp: true
  return tmpDir + File.separator + new File(path).getName()
}

copyGlobalLibraryScriptcall(String srcPath, String destPath = null) {
  destPath = destPath ?: createTempLocation(srcPath)
  writeFile file: destPath, text: libraryResource(srcPath)
  echo "copyGlobalLibraryScript: copied ${srcPath} to ${destPath}"
  sh "chmod +x ${destPath}"
  echo "added executable permissions to ${destPath}"
  return destPath
}

然后我这样调用最后一个函数:

runBuild(Map config) {
    def script = copyGlobalLibraryScript('build.sh')
    sh script
}

(我意识到我可以将上述功能折叠成一行)

然后依次通过调用(将整个文件修剪到相关部分):

pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    timestamps {
                        checkout scm

                        bbNotify( key: buildKey, name: BuildName) {
                            runBuild()
                        }

                        stash includes: '**', name: 'RelToSTAN'
                    }
                }
            }
}

这一切都失败了,并在问题的顶部出现了错误,但是,当切换到构建服务器时,我可以在指定位置找到该文件。

我不明白为什么詹金斯无法找到并执行它。

1 个答案:

答案 0 :(得分:0)

问题将是以下原因: 使用Java File对象时,它将始终引用Jenkins主对象上的某个位置。当然,它通常不能在沙箱中运行。

另一方面,readFilewriteFile方法始终引用由node块保留的,将调用封装的构建代理上的某个路径。

长话短说:不要使用File类。不幸的是,您需要手动创建临时路径。但这不应该太难。