如您所知,在Jenkins的共享库中,可以通过执行以下操作来加载资源(位于资源文件夹中):
libraryResource("script.sh")
现在,我的用例是我想在资源下的文件夹中加载文件数量:
+ resources
+ teamA
+ script1.sh
+ script2.sh
我想在做任何事情之前加载所有这些文件:
我在共享库中做了一个方法:
new File(scriptsFolder).eachFile() { file->
writeFile([file:"${env.workspace}/${file.getName()}",text:libraryResource("$scriptsFolder/${file.getName()}")])
sh("chmod +x ${env.workspace}/${file.getName()}")
}
其中
scriptsFolder= "teamA"
当然,我得到
java.io.IOException: Is a directory
因为libraryResource
必须获取文件路径参数。那么,有没有办法在不知道文件名或编号的情况下加载所有这些文件?
最佳答案
您可以使用Groovy @SourceURI批注获取共享库的绝对路径:
// vars/get_resource_dir.groovy
import groovy.transform.SourceURI
import java.nio.file.Path
import java.nio.file.Paths
class ScriptSourceUri {
@SourceURI
static URI uri
}
def call() {
Path scriptLocation = Paths.get(ScriptSourceUri.uri)
return scriptLocation.getParent().getParent().resolve('resources').toString()
}
使用该路径,您可以照常调用脚本:
sh "${get_resource_dir()}/com/example/test.sh"
关于jenkins - 如何在不知道文件名(或编号)的情况下从共享库的资源文件夹中加载文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51170409/