您如何使用Jenkins libraryResource从资源中读取文件?

时间:2018-11-27 12:36:32

标签: jenkins jenkins-pipeline

我无法使用Jenkins使用libraryResource加载资源。 我发现很多人使用libraryResource来加载资源的示例,但是没有人遇到我遇到的特定错误,因此我认为我正在丢失某些东西,但我不知道那可能是什么。

我正在尝试加载一个python脚本,几乎所有作业都可以重复使用。 我在resouces/org/foo/test.py中放置了一个简单的测试脚本,据我所知,我应该可以使用:

libraryResource('org/foo/test.py')

但是我得到了错误:

  

hudson.AbortException:找不到这样的库资源org / foo / test.py。

我使用从SCM加载的管道脚本,该脚本在jenkins的项目配置中配置。这是从中加载管道脚本的git存储库的结构。

-src
  -org
    -shared
      +Utilities.groovy
-jobs
  -nighly
    +nightly.groovy
-resources
  -org
   -foo
    +test.py

使用nightly.groovy根目录下的共享库加载Utitilies.groovy

@Library('shared-utilities')
import org.shared.Utilities

我尝试过的事情:

  • 在阶段外,阶段内和节点上运行libraryResource
  • 在运行scm之前检出libraryResource
  • 不同的路径foo/test.pyresources/org/foo/test.py

基于checkout scm的输出,正在获取包含resources/org/foo/test.py的最新提交,并且该提交位于代理的作业根目录上。

我没有主意,感谢您的帮助/建议。我真的很想避免不得不将此脚本提交给所有使用该脚本的项目,因为该脚本仅由Jenkins使用。

2 个答案:

答案 0 :(得分:0)

我仍然无法使libraryResource正常工作,我假设我在詹金斯,工作,共享资源的设置方面缺少一些东西,但是我找不到它。

与此同时,我正在使用它,以便我可以继续前进。

public static String loadJenkinsResource(String pathToResource) {
    return getResourceFromJenkinsCSM(pathToResource)
}

private static String getResourceFromJenkinsCSM(String pathToResource) {
    mainScript.checkout mainScript.scm
    return "resources/${pathToResource}"
}

private static String getResourceFromLibrary(String pathToResource) {
    def resourceContent = mainScript.libraryResource(pathToResource)
    def outputFile = getFileNameFromPath(pathToResource)
    mainScript.writeFile file: outputFile, text: resourceContent
    mainScript.sh "chmod +x ${outputFile}"
    return outputFile
}

getResourcesFromLibrary未经测试

答案 1 :(得分:0)

您所缺少的是使用libraryResource API的上下文/场景。

  

libraryResource:从共享库加载资源文件   从共享库中读取资源并以纯格式返回其内容   字符串。

因此,如果您已配置共享库,则可以使用libraryResource 内部 来读取{{1}中的资源} 共享库的目录。

希望可以更好地解决问题。