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

我正在使用Jenkins Build Flow插件来实现并行化。Groovy DSL执行某些文件操作。即使该选项Restrict where this

project can be run设置为在特定从属服务器上运行作业,但DSL仍在主服务器上运行。这不是故意的。

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

通常,我们如何使用Groovy从Jenkins主节点访问节点从节点上的文件?

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")

}

工作空间位于从属节点上,但是当我尝试将FileSet打开到远程FilePath时,以上代码失败。

回答:

Groovy DSL总是在master(在tomcats目录中)上执行。即使您安装了

插件并设置了要在某些特定从站上执行的构建作业。如果要从Groovy

DSL访问从站上的作业工作空间,则可以使用通道。我有一个在构建流程作业工作区中创建文件的示例:

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)

一种更简单的方法是在特定从属服务器上运行的Execute

Groovy脚本中(而不是在构建流程作业中)在下游作业中执行文件操作。您必须安装节点插件,并在DSL脚本中将从属名称作为参数传递:build(“

jobA”,paramNode:“ nodename”)

以上是 使用Groovy从Jenkins主节点访问节点从节点上的文件 的全部内容, 来源链接: utcz.com/qa/413405.html

回到顶部