我无法使用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.py
,resources/org/foo/test.py
基于checkout scm的输出,正在获取包含resources/org/foo/test.py
的最新提交,并且该提交位于代理的作业根目录上。
我没有主意,感谢您的帮助/建议。我真的很想避免不得不将此脚本提交给所有使用该脚本的项目,因为该脚本仅由Jenkins使用。
答案 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}中的资源} 共享库的目录。
希望可以更好地解决问题。