如您所知,在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/

10-16 10:14
查看更多