gpt4 book ai didi

file-io - 使用 Groovy 从 Jenkins 主节点访问从节点上的文件

转载 作者:行者123 更新时间:2023-12-02 10:45:43 24 4
gpt4 key购买 nike

我正在使用 Jenkins Build Flow 插件来实现并行化。 Groovy DSL 执行某些文件操作。尽管选项限制此项目可以运行的位置设置为在特定从属设备上运行作业,但 DSL 在主设备上运行。这不是有意的。

有人可以告诉我如何限制 DSL 在指定的从属设备上运行吗?即使我们有一种方法可以通过 DSL 访问从属文件系统,那也应该可行。

一般来说,我们如何使用 Groovy 从 Jenkins master 访问从节点上的文件?

def fp = new hudson.FilePath(build.workspace.channel, "/srv/jenkins/workspace/myworkspace_on_slave_node")
assert fp.exists() // returns true :)

def ant = new AntBuilder()

if (fp != null) {
def scanner = ant.fileScanner { // fails here :(, says /srv/jenkins/workspace/myworkspace_on_slave_node not found
// grab ALL files requested to be run
fileset(dir: "$fp", includes: "**/*.java")
}

// now lets iterate over - print - and count test files
int numFiles = 0
for (f in scanner) {
println("Found file $f")
numFiles++
}
println("Total files $numFiles")
}

工作区位于从属节点上,但是当我尝试打开远程 FilePath 的 FileSet 时,上述代码失败。

最佳答案

Groovy DSL 始终在 master 上执行(在 tomcats 目录中)。即使您安装节点标签参数插件并将构建作业设置为在某些特定从属设备上执行。如果您想从 Groovy DSL 访问从属设备上的作业工作区,您可以使用 channel 。这是我在构建流程作业工作区中创建文件的示例:

if(build.workspace.isRemote()){
channel = build.workspace.channel
}
String fp = build.workspace.toString() + "\\" + "newfile.txt"
newFile = new hudson.FilePath(channel, fp)
newFile.write("xyz", null)

一种更简单的方法是在特定从站上运行的执行 Groovy 脚本(而不是构建流程作业)中的下游作业中执行文件操作。您必须安装节点插件并将从属名称作为 DSL 脚本中的参数传递:build("jobA", paramNode: "节点名")

关于file-io - 使用 Groovy 从 Jenkins 主节点访问从节点上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31794545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com